マスター(NSOutlineView + NSTreeController)と詳細(NSOutlineView + NSTreeController)のセットアップを使用してマスター-詳細アプリケーションを実行しようとすると、問題が発生します。
これは、AppleのAbstract-Treeサンプルアプリに基づく最も単純なアプリケーションです。
https://s3.amazonaws.com/applicationtests/AbstractTree-MasterDetail.zip
基本的に、ツリーノードを使用する左側のプロジェクトブラウザと、プロジェクトブラウザの選択に依存する詳細ツリーを表示する右側の詳細ブラウザがあります。
私の設定は簡単です。
マスターNSOutlineViewは、CoreDataエンティティプロジェクトノードを渡すマスターNSTreeControllerにバインドします。詳細NSOutlineViewは、CoreDataエンティティの詳細ノードを渡すDetailNSTreeControllerにバインドします。
どちらも木です。
プロジェクトノードエンティティには詳細ノードとの関係があり、選択に応じてプロジェクトツリーに詳細ツリーを表示できます。
私が抱えている問題は、contentObject inDetailNSTreeControllerをマスターNSTreeController選択にバインドするときです。
詳細NSTreeControllercontentObjectはマスターNSTreeControllerselection.detailNodeにバインドします
マスターツリーoutlineViewで選択を変更するたびに、詳細NSTreeControllerは、割り当てが解除されることのないNSTreeControllerTreeNodesを作成します。
基本的に、マスターコントローラーの選択が変更されるたびに、詳細NSTreeContrllerは、割り当てが解除されることのない新しいNSTreeControllerTreeNodeオブジェクトの新しいセットを作成します。
Instruments Allocationツールをご覧ください。選択を変更するたびに、新しいノードが作成されます。すべてのマスターノードを削除した後でも、ノードは割り当てられたままです。
マスターコントローラーの選択を変更して新しいnibファイルをリロードするNSViewControllerを準備しようとしましたが、これは大きなオーバーヘッドのように思えます。
contentObjectバインドが別の値に変更されたときに、作成されたNSTreeControllerTreeNodesを破棄する方法を知っている人はいますか?
ありがとう。