Mon NSArray contient deux types de classes différents, qui dérivent tous deux de NSObject et ont une méthode avec le même nom. Si j'appelle :
[myArrayList
makeObjectsPerformSelector:@selector(dehydrate)
withObject:myParamObjec];
Je reçois l'exception 'sélecteur non reconnu' :
exception non capturée 'NSInvalidArgumentException', raison : '*** -[BlankItem dehydrate]: sélecteur non reconnu envoyé à l'instance 0x10328e0'
Si j'itére à travers chaque élément de 'myArrayList' et invoque manuellement 'hydrate' sur BlankItem en tant que sélecteur, même chose mais si je fais le cast correctement, tout va bien.
for (id item in myArray)
{
if ([item isKindOfClass:[BlankItem class]])
{
BlankItem *blankItem = (BlankItem *)item;
// cela fonctionne
[blankItem dehydrate:connectionFactory];
// cela produit l'exception
[item performSelector:@selector(dehydrate) withObject:myParamObjec];
}
else
{
[item performSelector:@selector(dehydrate) withObject:myParamObjec];
}
}
Déclarations de classe :
@interface BlankItem : NSObject {
}
- (void)hydrate:(MyParamClass *)paramClass;
@end
@interface RegularItem : NSObject {
}
- (void)hydrate:(MyParamClass *)paramClass;
@end
Est-ce que les deux classes, BlankItem et RegularItem, doivent hériter d'une classe de base commune pour que cela soit correct ?
Je ne vois pas ce que je fais ou ne fais pas qui produit cette erreur. Des suggestions ?