我的NSArray拥有两种不同类型的类,这两种类都派生自NSObject并且具有相同名称的方法。如果我打电话:
[myArrayList
makeObjectsPerformSelector:@selector(dehydrate)
withObject:myParamObjec];
我得到'无法识别的选择器'例外:
未被捕获的例外 'NSInvalidArgumentException',原因: '*** - [BlankItem脱水]: 无法识别的选择器发送到实例 0x10328e0'
如果我遍历'myArrayList'的每个元素并在BlankItem上手动调用'hydrate'作为选择器,同样的事情,但如果我正确投射,一切都没问题。
for (id item in myArray)
{
if ([item isKindOfClass:[BlankItem class]])
{
BlankItem *blankItem = (BlankItem *)item;
// this works
[blankItem dehydrate:connectionFactory];
// this produces the exception
[item performSelector:@selector(dehydrate) withObject:myParamObjec];
}
else
{
[item performSelector:@selector(dehydrate) withObject:myParamObjec];
}
}
班级声明:
@interface BlankItem : NSObject {
}
- (void)hydrate:(MyParamClass *)paramClass;
@end
@interface RegularItem : NSObject {
}
- (void)hydrate:(MyParamClass *)paramClass;
@end
这两个类,BlankItem和RegularItem是否需要从公共BaseClass继承才能使其正确?
我没有看到我正在做什么或者没有做到这就产生了这个错误。有什么建议吗?
答案 0 :(得分:2)
你想要的选择器是dehydrate:
- 你离开了冒号,这使得它成为一个完全不同的无冒号选择器。就Objective-C而言,选择者“脱水”和“脱水:”与“杀戮”和“技能”不同。