我想将排序描述符与自定义比较器一起使用
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',原因:'-[__NSDatecompareObject:toObject:]:发送了无法识别的选择器......
我究竟做错了什么?
如果我在块中使用比较器,它就可以工作,但我需要它通过选择器工作。
我找不到任何关于如何通过选择器使用比较器的示例代码或明确文档(适用于 iOS 3.x.x)。该文档讨论了与 self 进行比较,但我尝试将比较方法合并到对象中,但这也不起作用。
谁可以指出我的问题或一些示例代码以了解如何通过选择器使用它?
注意:比较器本身并不是简单的日期比较。那里还发生了很多事情。
如果你在比较NSDate
对象,您传递的选择器必须是NSDate
类并且只接受一个参数。
来自 NSSortDescriptor 文档:
选择器必须指定一个方法
由值实现
由 keyPath 标识的属性。这
用于比较的选择器是
传递了一个参数。
要提供您自己的排序选择器,您应该在 NSDate 上定义一个类别,并将自定义排序方法放在这里,例如
- (NSComparisonResult)customCompare:(id)toDate {
NSComparisonResult comparisonResult;
// Complex comparator contents
return comparisonResult;
}
OR如果你不关心 iOS 版本
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr
cmptr
是这样的块:
^(id date1, id date2) {
NSComparisonResult comparisonResult;
// Complex comparator contents
return comparisonResult;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)