これは簡単なはずですが、どれほど難しいことでしょう。
非常に単純なデータ モデルを持つドキュメント ベースのコア データ アプリケーションがあります。
NSTreeController によって制御され、NSOutlineView を通じて表示される、それ自体に対する親子関係を持つ「ノード」エンティティがあります。「ノード」には、NSArrayController によって管理される別のエンティティ タイプ「nodeProperties」との任意の (対 1 の) 関係もあります。両方のエンティティに NSManagedObject サブクラスがあります。ドキュメント クラスには、ツリー コントローラーとアレイ コントローラーの両方のインスタンスにバインドされたアウトレットがあります。
私の問題は、新しい「ノード」がアウトライン ビューのユーザー インターフェイス アクションによって作成されたときに、適切な (既存の) nodeProperties オブジェクトとの関係が設定されるようにする方法です。
私が試した/検討したアプローチ:
ツリー コントローラに (その add:、addChild: アクションから) 「ノード」を作成させ、「ノード」サブクラスの awakeFromInsert メソッドで nodeProperties オブジェクトへの関係を設定します。問題は、「ノード」の awakeFromInsert 内から nodeProperties オブジェクトにアクセスする手段が見つからないことです。「適切な」nodeProperties オブジェクトはドキュメント クラスのメソッドから利用できますが、ノードの awakeFromInsert メソッドからドキュメント オブジェクトにアクセスすることは MVC の原則を破るように思われ、共有ドキュメント オブジェクトが常に安全ではないことを読みました。およびドロップ操作(私の場合、新しいノードオブジェクトも作成されます)
ドキュメント クラスに add: および addChild: アクション メソッドを記述し、ツリー コントローラではなくエンド ユーザー アクションからこれらを呼び出します (私のドラッグ アンド ドロップ サポートはドキュメント クラスにもあります)。次に、これらのメソッド内からツリー コントローラの add: メソッドと addChild: メソッドを呼び出し、新しく作成されたノードに nodeProperties 関係を設定します。問題は、新しく作成されたノードへの参照をツリー コントローラに要求する方法がわからないことです。selectedObjects メソッドを使用して親を取得し、追加の前後で親の子を比較して新しいノードを取得しようとしました。しかし、現時点では子のコンテンツは変更されていません。おそらく更新が遅れているのでしょうか?
2 の変形として、ツリー コントローラの add:/addChild: メソッドをまったく使用しないでください。代わりに、ツリー コントローラの selectedOjects を使用してドキュメントの add:/addChild: メソッドにノード エンティティ オブジェクトを作成し、親を取得します。ツリーコントローラーの背後で何かをしているように見えるので、これはあまり好きではなく、ルートオブジェクトを作成するたびに setContent: を行う必要があります。
新しく作成されたノードの作成を観察する可能性を検討しましたが、それを達成するために何を観察すればよいかわかりません。
誰かが以前にこのようなことをしたにちがいありません - しかし、私は役に立ちませんでした。すべてのヘルプ、アドバイス、ガイダンスは大歓迎です。