我想使用带有自定义比较器的排序描述符
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 ',原因:'-__NSDate compareObject:toObject::unrecognized sent .....
我做错了什么?如果我在一个块中使用比较器,那么它可以工作,但我需要它通过选择器工作。我找不到任何关于如何通过选择器使用比较器的示例代码或清晰的文档(对于iOS 3.x.x)。文档中谈到了与self进行比较,但我尝试在object中加入compare方法,但也不起作用。
谁能给我指出我的问题或一些示例代码,告诉我如何通过选择器使用它?
注意:比较器本身不是简单的日期比较。还有更多的东西在里面。
发布于 2011-03-15 17:31:35
如果您正在比较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)cmptrcmptr是这样的一个块:
^(id date1, id date2) {
NSComparisonResult comparisonResult;
// Complex comparator contents
return comparisonResult;
}https://stackoverflow.com/questions/5309581
复制相似问题