Iphone NSSortDescriptor通过选择器使用自定义比较器时出现问题

Iphone NSSortDescriptor通过选择器使用自定义比较器时出现问题,iphone,selector,nssortdescriptor,Iphone,Selector,Nssortdescriptor,我想使用带有自定义比较器的sortdescriptor NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"object.dateTime" ascending:YES selector:@selector(compareObject:toObject:)]; (关键是ManagedObject) 比较法: - (NSComparisonResult)compareO

我想使用带有自定义比较器的sortdescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
    initWithKey:@"object.dateTime" 
    ascending:YES 
    selector:@selector(compareObject:toObject:)];
(关键是ManagedObject)

比较法:

- (NSComparisonResult)compareObject:(id)date1 toObject:(id)date2 {
    NSComparisonResult comparisonResult;
    // Complex comparator contents
    return comparisonResult;
}
但是,我得到一个错误: “NSInvalidArgumentException”,原因:“-[\uu NSDate compareObject:toObject:]:已发送无法识别的选择器

我做错了什么? 如果我在一个块中使用比较器,它就会工作,但我需要它通过选择器工作。 我找不到任何关于如何通过选择器(对于iOS 3.x.x)使用比较器的示例代码或清晰文档。文档中谈到了与self的比较,但我尝试将比较方法合并到object中,但这也不起作用

谁能给我指出我的问题或一些示例代码,告诉我如何通过选择器使用它


注:比较器本身不是一个简单的日期比较。其中还有很多内容。

如果要比较
NSDate
对象,则传递的选择器必须是
NSDate
类的方法,并且只接受一个参数

从NSSortDescriptor文档:

选择器必须指定一个方法 实现的价值观 由keyPath标识的属性。这个 用于比较的选择器为 传递了一个参数

要提供自己的排序选择器,您应该在NSDate上定义一个类别,并将自定义排序方法放置在此处,如

- (NSComparisonResult)customCompare:(id)toDate {
    NSComparisonResult comparisonResult;
    // Complex comparator contents
    return comparisonResult;
}
如果您不关心iOS版本<4.0,也可以使用

- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr
cmptr
是这样一个块:

^(id date1, id date2) {
    NSComparisonResult comparisonResult;
    // Complex comparator contents
    return comparisonResult;
}