按对象方法的结果对NSArray进行排序

时间:2012-06-14 13:48:24

标签: iphone ios sorting nsarray nsdate

所以我有一个名为Church的自定义对象的NSArray。每个教堂都有一系列的群众时光。因此教会中有一种方法可以计算出与用户当前时间最接近的质量。

-(NSDate *)closestTimeTo:(NSDate *)currentTime

我希望能够通过该方法为每个对象返回的结果(NSDate)对Church的NSArray进行排序。基本上是获得按最近时间和位置排序的按质量排序列表。

我正在使用类别,因为它是核心数据对象,所以无法将最接近的时间存储为属性。我也不认为将这些值保存到核心数据是个好主意,因为这些方法会因位置服务而不断调用。

关于如何使用对象方法的结果对数组进行排序的任何想法?

2 个答案:

答案 0 :(得分:2)

尝试以下块。这将有助于直接(或至少进行微小修改)。

NSArray *sortedArray;
sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *first = [(Church*)a closestTimeTo:currentTime];
    NSDate *second = [(Church*)b closestTimeTo:currentTime];
    return [first compare:second];
}];

答案 1 :(得分:1)

在您的班级中创建一个新方法,该方法需要另一个Church类并返回NSOrderedSameNSOrderedAscendingNSOrderedDescending,具体取决于您是希望该对象是第一个还是最后一个。使用closestTimeTo方法找出答案。然后使用NSArray sortedArrayUsingSelector调用您的方法。