选择器语法:为什么我得到无法识别的选择器错误?

时间:2014-06-03 22:51:43

标签: ios objective-c selector

我有一种比较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'

有什么问题?我想为每个参数我需要一个冒号?

1 个答案:

答案 0 :(得分:3)

sortedArrayUsingSelector:尝试将您的选择器应用于比较左侧的对象,而不是调用sortedArrayUsingSelector:的类。换句话说,如果您的类中存在启动排序的选择器,而不是NSArray内的对象的类(即不在您的ImpfVorgang类中),您将看到&# 34;无法识别的选择器错误"。

您可以更改代码以手动应用选择器,如下所示:

NSArray * sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingComparator:^(NSObject *a, NSObject* b) {
    return [self compare:a to:b];
}];

或者,您可以将比较逻辑移到比较器块中,然后完全放弃compare:to:方法。