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