我有一个数组,用于存储通过谓词获取的事件;我想按日期对它们进行排序。我读到我必须“在数组上调用sortedArrayUsingSelector :,为compareStartDateWithEvent:方法提供选择器”,但我不知道如何确切地使用它。有人可以给我一个例子吗?
这是我的数组:NSArray *events = [store eventsMatchingPredicate:predicate]
谢谢!
一旦有了阵列,请考虑:
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:
。如果那是您想要的订购,则可以使用它。否则,请使用上面的比较器方法。