2010-01-07 49 views
9

我正在使用NSSortDescriptor按升序对NSDate对象进行排序。但是,我需要没有日期才能在列表的最底部,而现在他们在顶部。NSSortDescriptor和零值

回答

9

最后,我已经决定了具有零值是不是一个好主意,如果我想要的是零值出现在升序列表的底部,我应该将日期设置为[NSDate distantFuture],然后在显示它们之前检查它。事实证明,这在应用程序中也具有更多的语义意义。

6

当然,我应该使用

initWithKey:ascending:selector: 

,写我自己的比较选择

+0

正是。你定制逻辑来处理nil值,然后调用[myNSDateInstance compare:secondDate];如果第二个日期不是零。 – 2010-01-07 17:40:59

+0

这不会有帮助,因为'compare:'将被发送到NSDate实例;如果'nil'结束接收者,结果将是'NSOrderedSame',并且如果接收者不是'nil'但是参数是,我不认为任何特定的结果是有保证的。 – 2010-01-07 18:07:43

+0

不幸的是,当从核心数据提取时,这不起作用。 – pkamb 2015-08-07 23:44:22

7

看起来你已经有了一个解决方案,但对于其他人仍然使用无NSDates,并在底部,我使用下面的代码,我排序降序,然后扭转发送到对象的顺序比较。

_sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dueDate" 
               ascending:NO 
               comparator:^NSComparisonResult(id obj1, id obj2) { 
                return [obj2 compare:obj1]; 
               }]; 
+0

如果obj1为零且obj2是日期,那么比较是否没有未定义的行为? – 2014-12-16 21:52:43