Modo corretto di utilizzare il delegato UIActionSheet? Puntatori mappati su memoria identica

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

Domanda

Sto usando la variabile actionSheet passata da actionSheet: didDismissWithButtonIndex: per confrontare l'azioneSheet chiamante con un elenco di variabili UIActionSheet nella mia classe. Questo sembra essere il modo in cui il metodo delegato è stato progettato per differenziare gli eventi.

- (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;
    }
}

}

Ogni volta che viene visualizzato un UIActionSheet, allocare un'istanza di UIActionSheet a una delle variabili di classe, impostare le proprietà di visualizzazione, visualizzarlo e rilasciarlo .

Inizialmente funziona senza problemi. Il problema è che dopo aver eseguito per un po ', alla fine entrambi i puntatori UIActionSheet (variabili di classe actionSheet1 & amp; actionSheet2 nell'esempio di codice sopra) finiranno per puntare alla stessa memoria, a seconda di ciò che accade in fase di esecuzione, causando quindi entrambe le istruzioni metodo delegato per valutare true. Non va bene.

Ora, se dovessi allocare ogni UIActionSheet una sola volta per corsa e tenerlo in memoria (non chiamare mai il rilascio), ciò non dovrebbe accadere. Ma sto cercando di essere conservatore qui. Apple intende utilizzare il delegato in questo modo?

È stato utile?

Soluzione

Quando crei il tuo UIActionSheet, dagli un tag:

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

Quindi, nel tuo metodo delegato, passa in base al tag per determinare il comportamento di quel particolare foglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top