traquer les "selector not recognized"

mai 2006 modifié dans Objective-C, Swift, C, C++ #1
Au cas où vous êtes vraiment embêtés par un "selector not recognized" mystérieux dont vous ne connaissez pas l'origine, voici une petit astuce qui vous permettra d'en retrouver facilement l'origine: il suffit de mettre à  profit les catégories.

Si par exemple vous tombez la dessus: [tt]*** -[NSCFArray countForObject:]: selector not recognized [self = 0x163aa830][/tt]

Il suffit de rajouter une catégorie de NSObject qui implémente la dite méthode (pas la peine de rajouter l'interface) dans n'importe quel .m de votre appli, puis de mettre un breakpoint sur une ligne dans votre implémentation bidon (par exemple avant le return), puis de relancer l'application avec le debugger
[tt]@implementation NSObject (unNomBidon)
-(int)countForObject:(id)object {
return 0;
}
@end[/tt]

Les classes implémentant réellement cette méthode ne seront pas affectées, puisqu'elles "surchargent" de toute façon la dite méthode. Par contre les autres classes seront affectées, et 'activeront' le debugger lorsque la méthode est invoquée. Résultat, vous avez une belle backtrace dans le debugger, et cela permet de retrouver plus facilement l'origine de l'erreur.
Connectez-vous ou Inscrivez-vous pour répondre.