私の Cocoa アプリにはNSTableView
、ディレクトリ内の一連のファイルをリストする 1 列のシートがあります (アプリはメイン データベースのバックアップを作成し、このリストをユーザーに提供して、特定のバックアップに戻すことができるようにします) )。コンテンツは によってテーブル ビューにロードされ、提供されますNSArrayController
。各オブジェクトは単なるNSFileWrapper
です (代わりに NSURL を使用することを検討していますが、余談になります)。NSArrayController は並べ替えを処理し、バインディングを介して行が選択されたときにボタンを有効にします。これはすべて素晴らしいことです。これらすべてを接続し、シートの nib に存在するサブクラス オブジェクト ( ) がありますNSWindowController
。BackupsSheetController
BackupsSheetController
ただし、ユーザーがセルの 1 つを編集すると、そのセルが表すファイルの名前を適切に変更し、新しい場所に配置することで、その変更に対応したいと考えています。NSTableViewDataSource
テーブル ビューは NSArrayController にバインドされているため、メッセージは送信されません– tableView:setObjectValue:forTableColumn:row:
。BackupsSheetController を nib の NSTableView オブジェクトのデータソースとして設定すると、そのメッセージが時々送信されますが、それほど頻繁ではありませんが、毎回は言うまでもありません。
このシナリオで私が目にするほとんどの質問と例は、テーブル ビュー内の項目のカスタム モデル クラスを使用してこれをすべて処理し、一部のコントローラー オブジェクトを応答したいプロパティを変更するためのオブザーバーにします。つまり、各項目は BackupNode オブジェクトのようなものであり、BackupsSheetController はそれぞれのname
プロパティ (または私がそれを何と呼ぶか) への変更を監視します。それは私のシナリオでは完全にやり過ぎに思えますが、既に使用しているバインディングを捨てたくないし、これを行う別の方法もありません。setObject:...
メッセージを確実に受け取るために、これを行う別の方法はありますか? または、NSArrayController をドロップして、BackupsSheetController をテーブルのデリゲートおよびデータソースにする必要がありますか?