2

私自身のバインド可能なカスタムツリービューを作成しています。そのためには、NSTreeControllerにアイテムの多対多関係の更新を観察したいと思います。 NSTreeControllerはCD管理オブジェクトコンテキストにバインドされています。すべての深度レベルには、親/子/ isLeafプロパティを持つ独自のCDエンティティがあります。私は、ビュー(およびアイテム子供の順序)で同じhierarcyを維持する必要があります。何かが挿入されると、私はその子プロパティを観察し始めます。そして、私は新たに挿入されたオブジェクトのindexpathを知る必要があります。挿入/削除のためのNSTreeControllerのバインドされたCoreDataエンティティの観察

私は挿入/削除されたものを正確に知りたいので、子供の挿入/削除のためにそれを観察することができます。私が理解するように、これを行う標準的な方法は、observeValue内の "変更" NSDictionaryを調べています:forKey ...、しかし変更はNULLです。

これは長い時間のバグですが、いくつかの良い回避策がありますか?いくつかの例のビューは配列を保存し、モデルが変更されたときに違いを比較することが分かりました。ツリービューの方が複雑です。また、この方法はメモリとCPUサイクルを無駄にします。 私はテストしている1つの回避策があります。それはちょっとした作品なので、私はまだそれについて説明しません。

+0

これでまともな解決法を思いついたことがありますか?私は同じ問題を抱えています。 –

答えて

1

NSTreeControllerをサブクラス化し、その挿入/削除メソッドを実装する方法について説明します。例えば、これのようなもの。

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath { 

     // ... code to update your object relationships .. 
     // ... Take care here if you update any variables in your model (eg a sortindex) that would trigger KVO in the NSTreeController. In those case you need to make the updates without triggering KVO by using setPrimitiveValue:forKey or get an infinite loop 

     [super insertObject:object atArrangedObjectIndexPath:indexPath]; 

} 
関連する問題