我基于 NSPersistentDocument 的应用程序的主视图是一个表格视图(绑定到 NSArrayController),显示记录列表,在它下面有一个“添加记录”按钮。我希望按钮导致以下(据说是微不足道的)行为。
- 创建一个新对象
- 为新对象设置一些默认值(存储在主文档中,全局不可用)
- 将其添加到表视图中。
以下是我尝试或拒绝的事情:
- 使用 NSArrayController "add" 动作 - 问题:不会返回新对象并且实现被延迟所以不可能修改新创建的对象
- 覆盖数据类的初始化 - 不起作用 - 我需要访问存储在文档类实例中的数据
- 子类 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]; }
对于未保存的文档,此代码实际上运行良好。但是,如果我保存文档并重新打开它,然后单击添加按钮会导致新记录在表中显示两次。显然“addObject”是多余的(尽管它在未保存的文档中工作正常)但没有它,新对象不会被选中。