Objective c 如何按日期对事件数组进行排序?

Objective c 如何按日期对事件数组进行排序?,objective-c,eventkit,Objective C,Eventkit,我有一个数组,它存储通过谓词获取的事件;我想按日期把它们分类。我读到我必须“调用sortedArrayUsingSelector:在数组上,为compareStartDateWithEvent:方法提供选择器”,但我不知道如何准确使用它。有人能给我举个例子吗 这是我的数组:NSArray*events=[storeeventsmatchingpredicate:predicate] 谢谢!一旦拥有阵列,请考虑: NSArray *sortedArray = [events sortedArray

我有一个数组,它存储通过谓词获取的事件;我想按日期把它们分类。我读到我必须“调用sortedArrayUsingSelector:在数组上,为compareStartDateWithEvent:方法提供选择器”,但我不知道如何准确使用它。有人能给我举个例子吗

这是我的数组:
NSArray*events=[storeeventsmatchingpredicate:predicate]

谢谢!

一旦拥有阵列,请考虑:

NSArray *sortedArray = [events sortedArrayUsingComparator:^NSComparisonResult(EKEvent *event1, EKEvent *event2) {
    return [event1.startDate compare:event2.startDate];
}];
这将使用内置的NSDate函数按开始日期对事件进行排序

-sortedarrayingcomparator
方法采用
NSComparator
块,其定义如下:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
基本上可以将其视为块(lambda函数)这需要两个参数,然后返回一个
NSComparisonResult
成员,该成员解释了两个给定对象的顺序。对象的类型取决于插入数组的内容,在本例中为
EKEvent
s。如何对它们进行排序取决于您自己;请阅读更多信息和规则。
NSArray
wil我多次调用你的块,每次显示两个项目,直到数组被排序

现在,幸运的是,
EKEvent
公开了一个选择器,它知道如何与
EKEvents
NSArray
进行比较,您可以使用另一个方法,只需告诉它使用EKEvent公开的比较选择器即可:

NSArray *sortedArray = [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)];

现在,
NSArray
将调用
-compareStartDateWithEvent:
每次它想要比较两个项目。如果这是您想要的顺序,您可以使用它。否则,使用上面的comparator方法。

哇,谢谢你!感谢你的解释!我主要是从我自己和其他人的代码中学到这一切,如果这些问题对你来说似乎很明显!我们都是从某个地方开始的。选择器的东西有时会有点混乱。看看封面下发生的事情的峰值。