首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过选择器使用自定义比较器的NSSortDescriptor问题

通过选择器使用自定义比较器的NSSortDescriptor问题
EN

Stack Overflow用户
提问于 2011-03-15 17:11:53
回答 1查看 8.7K关注 0票数 9

我想使用带有自定义比较器的排序描述符

代码语言:javascript
复制
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
    initWithKey:@"object.dateTime" 
    ascending:YES 
    selector:@selector(compareObject:toObject:)];

(密钥是ManagedObject)

比较器方法:

代码语言:javascript
复制
- (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方法,但也不起作用。

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

注意:比较器本身不是简单的日期比较。还有更多的东西在里面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-15 17:31:35

如果您正在比较NSDate对象,那么您传递的选择器必须是NSDate类的方法,并且只有一个参数。

从NSSortDescriptor文档中:

选择器必须指定由keyPath标识的属性的值实现的方法。向用于比较的选择器传递单个参数。

要提供您自己的排序选择器,您应该在NSDate上定义一个类别,并将您的自定义排序方法放在这里,如下所示

代码语言:javascript
复制
- (NSComparisonResult)customCompare:(id)toDate {
    NSComparisonResult comparisonResult;
    // Complex comparator contents
    return comparisonResult;
}

如果您不关心iOS版本低于4.0,您也可以使用

代码语言:javascript
复制
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr

cmptr是这样的一个块:

代码语言:javascript
复制
^(id date1, id date2) {
    NSComparisonResult comparisonResult;
    // Complex comparator contents
    return comparisonResult;
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5309581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档