Cocoa で最初のマスター詳細ビューを作成しています。私のデータ モデルは非常にシンプルです。いくつかの NSStrings プロパティを持つ単一のクラスのインスタンスを含む NSMutableArray だけです。
これまでに作成したものは次のとおりです。
- インスタンスを表すクラス。
- クラス インスタンスを保持するためにアプリ デリゲートのプロパティとして指定された NSMutableArray。
- 選択インスタンスのプロパティを保持する NSTable といくつかのテキスト フィールドを含むマスター詳細ビュー。
- アプリ デリゲートを指定するバインディングを持つ NSArrayController と、モデル キー パスとしての NSMutableArray プロパティの名前。
- NSTable と NSArrayController の列間のバインディング (コントローラー キー = "arrangedObjects"、および各列のモデル キー パス = クラスのプロパティ)。
- ビューのテキスト フィールドとセレクション間のバインディング (コントローラ キー = "selection"、および各テキスト フィールドのモデル キー パス = クラスのプロパティ)。
- オブジェクトの追加と削除を有効にするビューの「+」ボタンと「-」ボタン。
ただし、この設計には 2 つの問題があります。
(1) 「+」ボタンと「-」ボタンを実装する良い方法が見つかりません。最初に、それらを配列コントローラーの add: および remove: プロパティにバインドしました。これは機能しているように見えますが、問題があります。私のクラスは NSStrings をスタブ値に初期化する init メンバーを宣言していますが、新しいリスト エントリには空の文字列があるため、配列コントローラーは新しいインスタンスを [init] していないようです。各列。
次に、NSMutableArray からオブジェクトを追加または削除するアプリ デリゲートの IBActions にそれらをアタッチしました。ただし、これは間違っているように感じます。配列コントローラーと通信しないことで、モデル ビュー コントローラー アーキテクチャに違反しているように感じます。たとえば、「-」関数は、選択された項目を取得するためにアレイ コントローラと通信する必要があります。また、配列を変更した後に [didChangeValueForKey] メッセージを送信する必要があることに気付きました。これは、これが間違っているというシグナルのように感じます。
(2) 私のビューの詳細サブビューの 1 つは、選択したオブジェクトの NSString にバインドされた NSTextView です。実際には期待どおりに機能していません。新しいテキストが入力されると、クラスの他のメンバー (異なる値を持つ必要があります) が選択されていても、テキストは同じままです。また、テキスト データはクラスのどのインスタンスにも保存されません。
何かご意見は?前もって感謝します。