2010-05-19 2 views
2

Voici un scénario:Qu'est-ce qu'un moyen sûr de vérifier une réponse de protocole

Un contrôleur de vue pousse un nouveau contrôleur au contrôleur de navigation. Ce contrôleur enfant crée un modèle qui utilise un NSURLConnection. Lorsque cette connexion se termine, il va effectuer un appel comme suit:

[self.delegate modelDidFinishParsing:self]; 

Quelle est la manière sûre de produire ce code? En ce moment, j'ai ce code et il se bloque dans une certaine situation:

if ([self.delegate conformsToProtocol:@protocol(ModelDelegate)]) [self.delegate modelDidFinishParsing:self]; 

La situation quand il tombe en panne est lorsque le contrôleur de vue qui est propriétaire du modèle est sauté de la pile avant que le modèle se termine. Dois-je faire le modèle un ivar de sorte que le contrôleur le libère dans son propre - (void)dealloc?

Répondre

1

Dans votre chèque, vous pouvez vous assurer que le délégué n'est pas nil

if (self.delegate && [self.delegate conformsToProtocol...]) [self.delegate modelDidFinishParsing:self]; 
+0

Est-ce la bonne façon de faire tout? – rickharrison

+0

Eh bien, personnellement, j'utiliserais [self.delegate respondsToSelector ..] plutôt que [self.delegate conformsToProtocol ..], mais à part ça, ça devrait marcher. –

Questions connexes