2010-09-09 3 views
0

J'ai ce code:Puis-je ignorer cet avertissement iphone?

if([annotation respondsToSelector:@selector(tag)]){ 
    disclosureButton.tag = [annotation tag]; 
} 

et je reçois l'avertissement:

'-tag' pas trouvé dans le protocole

assez juste, mais je l'ai créé un nouveau objet avec le protocole qui a une variable synthétisée int tag.

EDIT: trouvé pourquoi l'application se plantait - pas cette ligne. Maintenant, je reçois juste un avertissement et l'application fonctionne bien.

Merci Tom

+0

Avez-vous essayé permettant NSZombieEnabled? – willcodejavaforfood

+0

Vous ne pensez pas que c'est cette ligne? Qu'est-ce que le débogueur a à dire à ce sujet? –

+0

EXC_BAD_ACCESS - c'était une variable que je n'avais pas retenue ... donc pas cette ligne du tout. Cette ligne me donne juste un avertissement. Jetez un coup d'oeil à NSZombieEnabled ... pas sûr de ce qu'il fait. :) merci –

Répondre

4

L'avertissement est généré car pour le type statique de annotation, MKAnnotation, il n'y a pas de méthode -tag. Comme vous avez déjà vérifié si le dynamique type répond au sélecteur, vous pouvez ignorer l'avertissement dans ce cas.

Pour se débarrasser de l'avertissement:

  • Si vous attendez une certaine classe, vous pouvez tester pour elle à la place:

    if ([annotation isKindOfClass:[TCPlaceMark class]]) { 
        disclosureButton.tag = [(TCPlaceMark *)annotation tag]; 
    } 
    
  • Pour un protocole:

    if ([annotation conformsToProtocol:@protocol(PlaceProtocol)]) { 
        disclosureButton.tag = [(id<PlaceProtocol>)annotation tag]; 
    } 
    
  • Ou si les deux ne s'appliquent pas, utilisez un protocole spécifique pour supprimer l'avertissement (utile, p. pidly changer les API d'Apple):

    @protocol TaggedProtocol 
    - (int)tag; 
    @end 
    
    // ... 
    if([annotation respondsToSelector:@selector(tag)]){ 
        disclosureButton.tag = [(id<TaggedProtocol>)annotation tag]; 
    } 
    
+0

c'est incroyable! :) Je vous remercie –

Questions connexes