アプリに多数のコントロールを含むインスペクター ペインがあります。これらのコントロールは、 を介してモデル オブジェクトにバインドされますNSArrayController
。選択したオブジェクトのタイプに応じて、異なるインスペクターのセットを表示しています (IB の動作と同じように)。インスペクタ コントローラは、アレイ コントローラのselection
を監視して、選択が変更されたときに必要なインスペクタのセットをロードできるようにします。
問題は、古いインスペクターのセットが明らかに削除されていないことです。インスペクターコントローラーがそれらへの強力な参照を保持しておらず、それらがスーパービューから削除されても、それらは引き続き残り、バインディングエラーをコンソールに記録します:
[<Circle 0x102107df0> valueForUndefinedKey:]: this class is not key value
coding-compliant for the key width.
私の推測ではNSArrayController
、バインディングのためにコントロールへの強い参照が保持されています。これは可能ですか?スーパービューからコントロールを削除する前に、バインディングを手動で削除する必要がありますか? このようなインスペクター ペインを適切に実装するにはどうすればよいですか?
編集:ドキュメントによると
レシーバーもオブザーバーも保持されません。
したがって、コントロールを削除するときにバインディングを自動的に削除する必要があると思いますね。