我有一种比较2个对象的方法:
- (NSComparisonResult)compare:(NSObject *)object1 to:(NSObject *)object2{
// do some stuff
return NSOrderedSame; // or NSOrderedAscending or NSOrderedDescending
}
这个方法被调用如下:
NSArray *sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingSelector:@selector(compare:to:)];
现在,当我在我的iPhone上运行时,一个"无法识别的选择器错误"与选择器一起抛出:
* 因未捕获的异常终止应用' NSInvalidArgumentException',原因:' - [ImpfVorgang compare:to:]:无法识别的选择器发送到实例0x14ebf040'
有什么问题?我想为每个参数我需要一个冒号?
答案 0 :(得分:3)
sortedArrayUsingSelector:
尝试将您的选择器应用于比较左侧的对象,而不是调用sortedArrayUsingSelector:
的类。换句话说,如果您的类中存在启动排序的选择器,而不是NSArray
内的对象的类(即不在您的ImpfVorgang
类中),您将看到&# 34;无法识别的选择器错误"。
您可以更改代码以手动应用选择器,如下所示:
NSArray * sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingComparator:^(NSObject *a, NSObject* b) {
return [self compare:a to:b];
}];
或者,您可以将比较逻辑移到比较器块中,然后完全放弃compare:to:
方法。