我正在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,然后,当scores 相等时,我也尝试按配对优先级排序。
也许是因为我连续两次score用作比较器?key但是,另一方面,NSComparator不允许将 arelationship作为 a 传递key。
我似乎无法破解这个。有人有什么想法吗?或者也许我应该采用不同的方法进行排序?