2009-12-20 9 views
1

Je dois avoir mal compris quelque chose. Je veux simplement utiliser performSelector: pour appeler l'une de mes propres méthodes. Ici, j'ai la déclaration de la méthode dans l'interface @:Problème de sélecteur

-(void)forceReload; 

FYI, tout ce code est défini sur un seul type. Et voici la mise en œuvre de la méthode et la méthode d'appel:

-(void)forceReload { 
    // code here... 
} 

-(void)entryActivityEditViewControllerDidFinish { 

    // etc... 

    DebugLog(@"self=%@", self); 
    DebugLog(@"responds to selector=%@", [self respondsToSelector:@selector(forceReload:)] ? @"true" : @"false"); 
    [self forceReload]; // Works fine 
    [self performSelector:@selector(forceReload:)]; // unrecognized selector 
} 

Ce qui me déconcerte est que je peux envoyer le message directement à l'objet, mais il échoue lorsqu'il est utilisé avec performSelector :. Si le succès avec le premier implique le succès avec le dernier?

Et pour le compléter, voici un peu de débug qui montre que mon objet cible (self) est le type même que je pense qu'il est et que j'envoie à l'objet approprié. J'ai également inclus un appel à respondsToSelector: et trouvé que mon objet ne répond pas à forceReload: ce qui me confond encore plus. Pourquoi cela serait-il?

0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:236): self=<EntryActivityTableViewController: 0x1259160> 
0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:237): responds to selector=false 
2009-12-20 10:22:44.999 Workouts[407:207] *** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160 
2009-12-20 10:22:45.017 Workouts[407:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160' 

Veuillez me dire si ma compréhension est fausse. :-)

Répondre

3

Votre méthode ne prend aucun argument, mais votre appel @selector() demande un sélecteur qui prend un argument. Ce que vous voulez, c'est ceci:

[self performSelector:@selector(forceReload)]; // unrecognized selector 
+1

Heh, supprimé par une erreur de syntaxe. Merci Ben! –