Core Data
を使用してストレージからデータを取得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
、2 番目のブロックがNSSortDescriptor
呼び出されないことです (しようとしましたNSLog
)。私のデータ構造の背景を説明するために、関連するCore Data
オブジェクト グラフのセクションを次に示します。
アプリケーションが行うことは、アイテムを互いに比較することです。最初のステップとして、一対比較の勝者がscore
インクリメントを取得します。lessImportantItems
しかし、ペアの優先順位もマークします。つまり、勝者から敗者への1 対多の関係を追加します。したがって、私の配列では、最初に で並べ替えようとしscore
、次にscore
s が等しい場合、ペアの優先度で並べ替えを試みます。
score
コンパレーターkey
を2回続けて使用しているからでしょうか?しかし、一方、a をいずれかとして渡すNSComparator
ことはできません。relationship
key
私はこれを割ることができないようです。誰にもアイデアはありますか?それとも、ソートに別のアプローチをとるべきでしょうか?