Die korrekte Art und Weise UIActionSheet Delegierten zu benutzen? Pointers Mapped auf identische Speicher

StackOverflow https://stackoverflow.com/questions/606733

Frage

Ich bin mit dem actionSheet Variable übergeben von actionSheet: didDismissWithButtonIndex: der anruf actionSheet auf eine Liste von UIActionSheet Variablen in meiner Klasse zu vergleichen. Dies scheint die Art und Weise der Delegatmethode zwischen den Ereignissen zu unterscheiden konzipiert zu sein.

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {

if (actionSheet == actionSheet1) {
    switch (buttonIndex) {
        case 0:
            // Do Something
            break;
        case 1:
            // Do Something Else
            break;
        case 2:
            // Cancel
            break;
    }
}

if (actionSheet == actionSheet2) {
    switch (buttonIndex) {
        case 0:
            // Do Something
            break;
        case 1:
            // Do Something Else
            break;
        case 2:
            // Cancel
            break;
    }
}

}

Jedes Mal, wenn ein UIActionSheet angezeigt wird, ich Alloc eine Instanz von UIActionSheet einem der Klassenvariablen, stellen Sie die Anzeigeeigenschaften, zeigen Sie es und lassen Sie sie .

Das funktioniert reibungslos, auf den ersten. Das Problem ist, dass für eine Weile nach dem Laufen, schließlich beide UIActionSheet Zeiger (Klassenvariablen actionSheet1 & actionSheet2 im Codebeispiel oben) auf den gleichen Speicher zeigt am Ende, je nachdem, was zur Laufzeit geschieht, wodurch beide, wenn Aussagen in den Delegaten Verfahren zur Bewertung wahr. Nicht gut.

Nun, wenn ich pro Lauf jedes UIActionSheet nur einmal Alloc waren und halten an dem Speicher (nie Release nennen), sollte dies nicht passieren. Aber ich versuche, hier konservativ. Übernimmt Apple beabsichtigt, dass die Delegierten auf diese Weise verwendet werden?

War es hilfreich?

Lösung

Wenn Sie Ihre UIActionSheet erstellen, geben Sie ihm einen Tag:

actionSheet.tag = 1; // or 2 or 3 or ...

Dann in Ihrem Delegatmethode, wird der Schalter auf dem Tag basiert das Verhalten des jeweiligen Blattes zu bestimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top