2010-01-21 5 views
0

J'ai une classe de rappel avec la méthode -(void)fire et il appelle
[target performSelector:selector withObject:dictionary];
Juste avant cette ligne ajoutai-je NSLog(@"%@", [[dictionary class] description]); pour voir où l'objet a changé, lors du débogage retourne NSCFDictionary.changements iPhone performSelector type d'objet

Alors tout allait bien. Ensuite, je suis allé et ajouté une ligne similaire pour obtenir le type d'arguments dans la méthode appelée. Maintenant, lors du débogage, il renvoie NSCFString, tandis que le rappel enregistre NSCFDictionary.

Y at-il une raison pour laquelle cet objet devient NSString une fois que j'appelle performSelector?

+0

Quelle est la signature de méthode pour la méthode appelée par votre sélecteur? – gerry3

+0

Je ne sais pas exactement ce que vous voulez dire – woody993

+0

Comment est attribué le "sélecteur"? – gerry3

Répondre

1

Vous ne pouvez transmettre qu'un seul argument à votre méthode si vous utilisez performSelector: withObject :.

Découvrez performSelector: withObject: withObject: ou utilisez NSInvocation.

+0

Oh, en fait, je m'excuse, je n'ai pas mon code près de moi. Le sélecteur réel est assigné en utilisant @selector (TokenHandler :) – woody993

+0

Et le premier paramètre a le type (NSDictionary *)? Mais à l'intérieur de la méthode, l'objet s'identifie comme un NSString? – gerry3

+0

Il est en fait (id), mais oui, il est identifié comme NSString. Je pensais juste et il peut probablement devenir (NSDictionary *), mais il serait bon de savoir pourquoi il fait cela et de le garder comme (id) – woody993

Questions connexes