ソート記述子を持つフェッチ要求「foo」があります (整数 16 属性を降順でソートします)。したがって、フェッチ要求を実行します。
__block NSArray *results = nil;
[_managedObjectContext performBlockAndWait:
^{
results = [_managedObjectContext executeFetchRequest:<foo> error:nil];
}];
return results;
iOS 6 以降でこのフェッチ要求を実行すると、結果は指定/期待どおりに並べ替えられます (逆整数インデックス順)。
しかし、iOS 5.1 で実行すると、結果がソートされません!
しかし、まったく同じソート記述子を結果配列にすぐに適用すると、次のようになります。
results = [results sortedArrayUsingDescriptors:<foo>.sortDescriptors];
結果は正しくソートされます。
他の誰かがこのようなことに遭遇しましたか? もしそうなら、あなたは原因を発見しましたか?
ありがとう!
カール
PS: 関連があることが判明した場合に備えて、「foo」の定義は次のとおりです。
-(NSFetchRequest *)fetchRequestForUnparsedStoriesOfStoryListWithId:(id)storyListId
{
NSPredicate *hasStoryListWithIdPredicate = [NSPredicate predicateWithFormat:@"ANY lists.id = %@", storyListId];
NSPredicate *isUnparsedStoryOfStoryListWithIdPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[hasStoryListWithIdPredicate, self.isUnparsedPredicate]];
NSFetchRequest *fetchRequestForUnparsedStoriesOfStoryListWithId = [NSFetchRequest fetchRequestWithEntityName:@"Story"];
fetchRequestForUnparsedStoriesOfStoryListWithId.predicate = isUnparsedStoryOfStoryListWithIdPredicate;
fetchRequestForUnparsedStoriesOfStoryListWithId.sortDescriptors = [NSArray arrayWithObject:self.descendingIndexSortDescriptor];
return fetchRequestForUnparsedStoriesOfStoryListWithId;
}
ソート記述子の定義は次のとおりです。
-(NSSortDescriptor *)descendingIndexSortDescriptor
{
if (! _descendingIndexSortDescriptor)
{
self.descendingIndexSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:NO];
}
return _descendingIndexSortDescriptor;
}
PPS: このフェッチのコンテキストに関するもう少しのコンテキスト: これは、1) バックグラウンド スレッド/バックグラウンド MOC (NSPrivateQueueConcurrencyType を持つネストされた MOC) のサーバー情報の解析により、いくつかの基本的なプロパティが決定された後、アプリの起動時に発生します。 、次に 2) バックグラウンド MOC に一連の Story エンティティを作成し、(とりわけ) 並べ替え対象のインデックスを持ち、3) そのバックグラウンド MOC に変更を保存しました。これらの操作が完了した直後にのみ、上記のフェッチ要求が実行され、同じバックグラウンド スレッドとバックグラウンド MOC で実行されます。ここを読んで: NSManagedContext からのフェッチ結果に対して NSSortdescriptor が無効です—「データが永続ストアに保存されない限り、マスターコンテキストのデータがダーティである、つまり変更されている場合、並べ替えは機能しません」、ステップ 3) で保存を強制しようとしました) " 永続ストア (つまり、ディスク) へのネストされた MOC チェーンですが、それも効果がありませんでした: iOS 5.1 (のみ) では、このフェッチの結果は、フェッチを実行した後に「手動で」結果をソートしない限り、ソートされません。 .