現時点では、コア データのバックエンドである nstreecontroller に固執しています。私の問題は、フィールドを編集したり、新しい行を追加したりしても、再配置がトリガーされないことです。
構造:
- コンテンツの準備をオンにして構成され、遅延フェッチを使用する NSTreeController。コントローラーは appDelegate.managedObjectContext および appDelegate.mySortDescriptor (内部に nssortdescriptor を含む配列を返す関数) にバインドされます。
- 列が treecontroller.arrangedObjects.name にバインドされている Outlineview。Outlineview も SourceList モードです。
- アイテムと1対多の関係(子)と1対1の関係(親)を持つ「アイテム」と呼ばれるエンティティ。そしてもちろん、表示値を保持する「name」というフィールドがあります。
- 2つのストレージ。1 つはメモリに保持するだけで、デフォルトのものです。一時ストレージは、ルート エンティティをセットアップするために使用されます (単に「視覚的」であるため、格納したくありません)。
ここまでは、次を除いてすべて問題ありません。
- 起動時に sortdescriptor が読み込まれますが、実行されません (自分自身を再配置関数と呼ぶ必要があります)。
- コアデータを変更しないと、再配置メソッドがトリガーされます
私はすでに自分で問題を解決しようとしましたが、次の結果が得られました。
- 「遅延フェッチを使用する」を削除すると、問題 o_O が解決されますが、誰がそれを望んでいますか?!
- この問題は、outlineView:setObjectValue:forTableColumn:byItem: (outlineview データソース) でrearrange を呼び出すと解決します。しかし、これが呼び出される理由がよくわかりません (coredata を使用しているので、呼び出されるべきではありませんか?)。一方、rearrange を呼び出すと、ソートが再び台無しになることがよくあります (例: 値を変更していないセルを保存した場合)。
それが、あなたが何か間違ったことをしているという事実に直面しなければならないと私が自分に言い聞かせた理由です:)
私が実際に持ちたいのは次のとおりです。
- CoreData バックエンド
- Outlineview は常にソートされます (ユーザーは変更できません)。
- ルート オブジェクトの保存をスキップする
- 少ない仕事はいつでも大歓迎
どうもありがとう、よろしく、マチュー・リオロ
PS: ヒントも大歓迎です