我正在Core Data
使用 an 从存储中获取数据NSFetchRequest
并将该数据存储在一个中array
- 一切都很好。作为下一步,我想array
使用NSSortDescriptors
这样的排序:
array = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) {
if ([[[array objectAtIndex:[obj2 integerValue]] valueForKey:@"lessImportantItems"] containsObject:[array objectAtIndex:[obj1 integerValue]]]) {
return (NSComparisonResult)NSOrderedAscending;
} else {
return (NSComparisonResult)NSOrderedDescending;
}
}],
[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO], nil]];
我遇到的问题是NSComparator
第二个中的块NSSortDescriptor
没有被调用(我试图NSLog
)。为了给我的数据结构一些背景知识,这里是相关的Core Data
对象图部分:
该应用程序所做的是将项目相互比较。作为第一步,配对比较中的获胜者会获得一个score
增量。lessImportantItems
但我也标记了配对优先级,即我添加了从赢家到输家的一对多关系。所以,在我的数组中,我首先尝试按 排序score
,然后,当score
s 相等时,我也尝试按配对优先级排序。
也许是因为我连续两次score
用作比较器?key
但是,另一方面,NSComparator
不允许将 arelationship
作为 a 传递key
。
我似乎无法破解这个。有人有什么想法吗?或者也许我应该采用不同的方法进行排序?