我有一个数组存储通过谓词获取的事件;我想按日期排序。我读到我必须“在数组上调用sortedArrayUsingSelector:为compareStartDateWithEvent:方法提供选择器”,但我不知道如何使用它。有人可以给我一个例子吗?
这是我的数组:NSArray *events = [store eventsMatchingPredicate:predicate]
谢谢!
答案 0 :(得分:1)
获得阵列后,请考虑:
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
s。你如何对它们进行排序取决于你;阅读NSComparator了解更多信息和规则。 NSArray
会多次调用您的块,每次都会显示两个项目,直到对数组进行排序。
现在,幸运的是,EKEvent
公开了一个知道如何与EKEvents
进行比较的选择器。 NSArray
有另一种方法,sortedArrayUsingSelector:可供您使用,只需告诉它使用EKEvent公开的比较选择器:
NSArray *sortedArray = [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)];
现在NSArray
每次想要比较两个项目时都会调用- compareStartDateWithEvent:
。如果这是您想要的订单,您可以使用它。否则,请使用上面的比较器方法。