2009-05-20 2 views
2

私は基本的な質問があります。 NSManagedObjectContextに対して実行するNSFetchRequestがあるとします。フェッチ要求に明示的にソート記述子が設定されていない場合、オブジェクトは毎回ランダムであるか、最初に管理オブジェクトコンテキストに追加された順序で配列に吐き出されますか?私はドキュメントのどこにでもこの回答を見つけることができません。コアデータフェッチ(NSFetchRequest)は、デフォルトで特定の方法でソートされていますか?

答えて

3

いいえ、注文することは保証されていません。使用しているデータ・ストアのタイプ(一度も試したことがない)に応じて一貫した順序付けが行われることもありますが、何らかの形で依存する必要はありません。

作成日によって簡単に注文できます。あなたのエンティティに日付属性を追加し、現在の日付にそれをawakeFromInsertに初期化し、あなたのフェッチにそのソート記述子を指定してください。

0

注文は「毎回ランダム」ではないかもしれませんが、あなたが知っている限り、それに依存することはできません。特定の順序が必要な場合は、ソート記述子を使用します。

0

ここに2つの質問があります:毎回同じ順序で出てくるのでしょうか?そして、それは挿入注文に注文ですか?

設定された順序で出てきますが、これはいくつかの順序です。 NSSetは単なるインタフェースであり、NSSetを実装するプライベートクラスがあることに注意してください。つまり、NSSetのいくつかのインスタンスは、allObjectsを呼び出すと返されますが、いくつかの一貫性のある順序で返すかもしれませんが、ほとんどの場合、ハッシュされた辞書としてほぼ普遍的に実装されています。

ハッシュアルゴリズムは、格納される内容とハッシュされる方法によって大きく変化するため、毎回同じ順序で出てくることがありますが、何か変わったときに別の時間を守ることができます少し。

技術的には、実際にはランダムではなく、安定した順序である可能性があります。

2番目の質問には、ほぼ確実にNOTの挿入順であると言います。

awakeFromInsertを処理するためのMarcの提案は良いものであり、あなたが望むものです。

0

注文上の保証はありません。たとえば、結果をランダムな順序で返すNSAtomicStoreまたはNSIncrementalStoreを実装できます。これは完全に正しいでしょう。私は、SQLiteストアが異なるバージョンのオペレーティングシステムで異なる順序を返すのを見てきました。

関連する問題