Manière correcte d'utiliser UIActionSheet Delegate? Pointeurs mappés sur une mémoire identique

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

Question

J'utilise la variable actionSheet transmise par actionSheet: didDismissWithButtonIndex: pour comparer l'actionSheet appelante à une liste de variables UIActionSheet de ma classe. Cela semble être la façon dont la méthode déléguée a été conçue pour différencier les événements.

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

}

Chaque fois qu'une feuille UIActionSheet est affichée, j'attribue une instance de UIActionSheet à l'une des variables de classe, définit les propriétés d'affichage, l'affiche et la publie .

Cela fonctionne bien, au début. Le problème est qu’après un certain temps d’exécution, les deux pointeurs UIActionSheet (variables de classe actionSheet1 et actionSheet2 dans l’exemple de code ci-dessus) finiront par pointer vers la même mémoire, en fonction de ce qui se passe au moment de l’exécution, provoquant ainsi les deux instructions if méthode déléguée pour évaluer vrai. Pas bien.

Maintenant, si je devais allouer chaque feuille UIActionSheet une fois par exécution et conserver la mémoire (ne jamais appeler la libération), cela ne devrait pas arriver. Mais j'essaie d'être conservateur ici. Apple a-t-il l'intention d'utiliser le délégué de cette manière?

Était-ce utile?

La solution

Lorsque vous créez votre feuille UIActionSheet, attribuez-lui une balise:

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

Ensuite, dans votre méthode de délégation, effectuez une commutation en fonction de la balise pour déterminer le comportement de cette feuille.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top