Objective c 导致NSInvalidArgumentException的数组中异构项的PerformSelect
我的NSArray包含两种不同类型的类,它们都派生自NSObject,并且有一个同名的方法。如果我打电话:Objective c 导致NSInvalidArgumentException的数组中异构项的PerformSelect,objective-c,Objective C,我的NSArray包含两种不同类型的类,它们都派生自NSObject,并且有一个同名的方法。如果我打电话: [myArrayList makeObjectsPerformSelector:@selector(dehydrate) withObject:myParamObjec]; 我收到“无法识别的选择器”异常: 未捕获异常 “NSInvalidArgumentException”,原因: '***-[BlankItem脱水]: 已将无法识别的选择器发送到实例 0x
[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和RegulationItem这两个类是否需要从公共基类继承才能正确执行此操作
我看不出我正在做什么或没有做什么会产生这个错误。有什么建议吗?您想要的选择器是
脱水:
-您去掉了冒号,这使它成为一个完全不同的、无冒号的选择器。就Objective-C而言,“脱水”和“脱水:”选择器与“杀死”和“技能”一样不同!谢谢你接电话。