Ios 选择器语法:为什么出现无法识别的选择器错误?
我有一个比较两个对象的方法:Ios 选择器语法:为什么出现无法识别的选择器错误?,ios,objective-c,selector,Ios,Objective C,Selector,我有一个比较两个对象的方法: - (NSComparisonResult)compare:(NSObject *)object1 to:(NSObject *)object2{ // do some stuff return NSOrderedSame; // or NSOrderedAscending or NSOrderedDescending } 此方法的调用方式如下: NSArray *sortedSyncedAufgaben = [syncedAufgabe sort
- (NSComparisonResult)compare:(NSObject *)object1 to:(NSObject *)object2{
// do some stuff
return NSOrderedSame; // or NSOrderedAscending or NSOrderedDescending
}
此方法的调用方式如下:
NSArray *sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingSelector:@selector(compare:to:)];
NSArray * sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingComparator:^(NSObject *a, NSObject* b) {
return [self compare:a to:b];
}];
现在,当我在iPhone上运行此操作时,会在选择器的行中抛出一个“无法识别的选择器错误”:
*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[ImpfVorgang比较:到:]:发送到实例0x14ebf040的选择器无法识别”
怎么了?我认为每个参数都需要一个冒号?
sortedArrayUsingSelector:
尝试将选择器应用于比较左侧的对象,而不是调用sortedArrayUsingSelector:
的类。换句话说,如果选择器存在于启动排序的类中,而不是NSArray
中的对象类中(即不在ImpfVorgang
类中),则将看到“无法识别的选择器错误”
您可以更改代码以手动应用选择器,如下所示:
NSArray *sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingSelector:@selector(compare:to:)];
NSArray * sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingComparator:^(NSObject *a, NSObject* b) {
return [self compare:a to:b];
}];
或者,您可以将比较逻辑移动到comparator块中,并将
compare:to:
方法一起删除。我们可以看到整个错误消息吗?该方法定义在哪里?在syncedAufgabe
是实例的类上?@JoshCaswell是的,在同一类/视图中controller@NobodyNada***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[ImpfVorgang比较:到:]:发送到实例0x14ebf040'的无法识别的选择器
@mradlmaier是否compare:to:
在ImpfVorgang.m中定义?