如何按日期对EKEvent数组进行排序?

问题描述 投票:0回答:1

我有一个数组,用于存储通过谓词获取的事件;我想按日期对它们进行排序。我读到我必须“在数组上调用sortedArrayUsingSelector :,为compareStartDateWithEvent:方法提供选择器”,但我不知道如何确切地使用它。有人可以给我一个例子吗?

这是我的数组:NSArray *events = [store eventsMatchingPredicate:predicate]谢谢!

objective-c eventkit
1个回答
2
投票

一旦有了阵列,请考虑:

NSArray *sortedArray = [events sortedArrayUsingComparator:^NSComparisonResult(EKEvent *event1, EKEvent *event2) {
    return [event1.startDate compare:event2.startDate];
}];

这将使用内置的NSDate - compare函数按开始日期对事件进行排序。

- sortedArrayUsingComparator方法采用一个NSComparator块,其定义为:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);

您基本上可以将其视为带有两个参数的块(lambda函数),然后返回一个NSComparisonResult成员,该成员解释两个给定对象的顺序。对象的类型取决于您要放入数组的内容,在这种情况下为EKEvent。如何选择它们取决于您;阅读NSComparator,了解更多信息和规则。 NSArray将多次调用您的块,每次显示两个项目,直到对数组进行排序为止。

[幸运的是,EKEvent公开了一个选择器,该选择器知道如何与EKEvents比较。 NSArray还有另一种方法,您可以使用sortedArrayUsingSelector:,只是告诉它使用EKEvent公开的比较选择器:

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

现在NSArray每次想要比较两个项目时都会调用- compareStartDateWithEvent:。如果那是您想要的订购,则可以使用它。否则,请使用上面的比较器方法。

© www.soinside.com 2019 - 2024. All rights reserved.