简体   繁体   English

如何:按日期降序对NSArray进行排序,结果集顶部还保留nil日期

[英]How to: sort NSArray by date in descending order with nil date left on top of result set

I have the following method where self.orderHeader.meetings is a core data NSManagedObject with meetings being a list of metting. 我有以下方法,其中self.orderHeader.meetings是核心数据NSManagedObject,会议是会议列表。 The method sorts the meetings by date (meetingDate): 该方法按日期(meetingDate)对会议进行排序:

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

It returns what I want except for meeting objects that do not have a meetingDate set. 它返回我想要的内容, 除了没有设置MeetingDate的会议对象。 These are left at the bottom of the list, but (given the descending order) I would like to have them shown on top of the list: 这些都留在列表的底部,但是(考虑到降序)我希望它们显示在列表的顶部:

So for example: [nil, 2014-12-29, 2014-12-24] instead of [2014-12-29, 2014-12-24, nil] 举例来说:[nil,2014-12-29,2014-12-24]而不是[2014-12-29,2014-12-24,nil]

Is there an easy way to do this ?? 是否有捷径可寻 ??

Try something like this: 尝试这样的事情:

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];
}];

您可以用[NSDate distantFuture]替换零日期

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM