如何:按日期降序排序NSArray,并在结果集的顶部留下零日期

时间:2014-12-29 20:32:32

标签: ios objective-c sorting nsarray

我有以下方法,其中self.orderHeader.meetings是核心数据NSManagedObject,其中会议是一个metting列表。该方法按日期(meetingDate)对会议进行排序:

- (NSArray *)sortMeetingList {
    return [[self.orderHeader.meetings allObjects] sortedArrayUsingDescriptors: [NSArray arrayWithObject: [NSSortDescriptor sortDescriptorWithKey:@"meetingDate" ascending:NO]]];
}

它返回我想要的之外的会议对象没有设置meetingDate。这些都留在列表的底部,但是(按降序排列)我希望它们显示在列表的顶部:

例如:[nil,2014-12-29,2014-12-24]而不是[2014-12-29,2014-12-24,nil]

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:4)

尝试这样的事情:

NSArray *sortedMeetings = [unsortedMeetings sortedArrayUsingComparator:^NSComparisonResult(MeetingObjectClass *obj1, MeetingObjectClass *obj2) {
    if (!obj1.meetingDate)
        return NSOrderedAscending;
    if (!obj2.meetingDate)
        return NSOrderedDescending;
    return [obj2.meetingDate compare:obj1.meetingDate];
}];

答案 1 :(得分:0)

您可以使用[NSDate distantFuture]

替换无日期

答案 2 :(得分:0)

使用不同的排序方法,以便您可以明确指定如何处理每个比较,例如使用sortedArrayUsingFunction:context: