私の NSPersistentDocument ベースのアプリケーションのメイン ビューは、レコードのリストを表示する (NSArrayController にバインドされた) テーブル ビューで、その下に [レコードの追加] ボタンがあります。ボタンが次の(おそらく些細な)動作を引き起こすようにしたい。
- 新しいオブジェクトを作成する
- 新しいオブジェクトにいくつかのデフォルトを設定します (メイン ドキュメントに保存され、グローバルには使用できません)。
- テーブル ビューに追加します。
私が試した、または却下したことは次のとおりです。
- NSArrayController の「追加」アクションを使用します - 問題: 新しいオブジェクトが返されず、実装が延期されるため、新しく作成されたオブジェクトを変更することはできません
- データ クラスの init をオーバーライドします - 機能しません - ドキュメント クラス インスタンスに格納されているデータにアクセスする必要があります
- ドキュメントに保存されているデータにアクセスする必要があるため、NSArrayController をサブクラス化し、"newObject" をオーバーライドしても機能しません。
次のコードは「ほぼ」機能しました:
- (IBAction)newRecord:(id)sender { MyDataClass *newRecord = [recordsArrayController newObject]; newRecord.setting1=self.defaultSetting1; newRecord.setting2=self.defaultSetting2; // ... etc... [recordsArrayController addObject:newRecord]; [recordsTable scrollRowToVisible:[recordsTable selectedRow]]; [newRecord release]; }
このコードは、保存されていないドキュメントに対して実際にうまく機能します。しかし、ドキュメントを保存して再度開くと、追加ボタンをクリックすると、新しいレコードがテーブルに 2 回表示されます。明らかに、「addObject」は冗長ですが (保存されていないドキュメントでは正常に機能しますが)、それがないと新しいオブジェクトは選択されません。