私はサンプルプロジェクトを持っています
https://github.com/ericgorr/LazyFetching
セットアップは非常に簡単です。私の CoreData モデルには、次の 2 つのエンティティがあります。
- name プロパティと Item エンティティとの対多関係 (items) を持つ Shelf
- name プロパティを持つアイテムは、Shelf エンティティ (「親」) と関係があります。
次に、2 つの NSArrayControllers があります。
モード「エンティティ名」、エンティティ名「シェルフ」のシェルフ アレイ コントローラ。コンテンツを準備し、遅延フェッチを使用します。
モード「エンティティ名」、エンティティ名「アイテム」のアイテム配列コントローラ。コンテンツを準備せず、遅延フェッチを使用しません。そのコンテンツ セットは、シェルフ アレイ コントローラの選択と「アイテム」プロパティにバインドされています。
ウィンドウには、2 つの NSTableView と 2 つの + ボタンがあり、それぞれが配列コントローラーの 1 つに関連付けられています。
私がしたことは:
- 上部の + ボタンを押して、新しいシェルフ エントリに「a」という名前を付けます。
- 上部の + ボタンをもう一度押して、シェルフ エントリに「b」という名前を付けます。
- 最上部の列ヘッダーを押して、シェルフ エントリを昇順で並べ替えます。
- 「b」エントリが選択されていることを確認します
- 一番下の + ボタンを押して、項目エントリの名前を任意の名前に変更しました
私が見ているのは、「b」エントリが最初にリストされるように、上部 (シェルフ) テーブルの変更順序の行です。
Info ボタンを押すと、次のようになります。
- NSLog シェルフ アレイ コントローラーの並べ替え記述子
- シェルフ アレイ コントローラーの配列オブジェクト配列内のエントリの名前を出力します。
- シェルフ アレイ コントローラーでrearrangeObjectsを呼び出す
- シェルフ アレイ コントローラーの配列オブジェクト配列内のエントリの名前を出力します。
このすべての後、予想どおり、Shelf Array Controller に単一のソート記述子が表示されます: name、ascending、compare:
そして、手配されたオブジェクトの次の出力:
2013-05-19 16:08:56.023 LazyFetching[11791:303] b
2013-05-19 16:08:56.024 LazyFetching[11791:303] を
と
2013-05-19 16:08:56.024 LazyFetching[11791:303] b
2013-05-19 16:08:56.024 LazyFetching[11791:303] を
何らかの理由で、Shelf Array Controller 内のアイテムをソートしなくなりました。
Shelf Array Controller の Lazy Fetching をオフにすると、すべてが正しく機能しているように見えます。
だから、私が理解していないのは、Lazy Fetching が有効になっているときにこの動作が見られる理由です。バグである可能性が高いようです。もしそうなら、私は確かに重複報告である可能性が高いものを提出することができます. しかし、私が推測しているのは、いくつかの適切な説明とそれを処理する標準的な方法があるため、アイテムは配列コントローラーの ArrangeObjects 配列の並べ替え記述子によって並べ替えられたままになります。