在我的 Cocoa 应用程序中,我有一个单列的工作表,其中NSTableView
列出了目录中的一堆文件(该应用程序会备份它的主数据库,将这个列表提供给用户,以便他们可以恢复到特定的备份)。内容由 加载并提供给表格视图NSArrayController
,每个对象只是一个NSFileWrapper
(我正在考虑改用 NSURL,但我离题了)。NSArrayController 处理排序,当通过绑定选择一行时启用按钮,这一切都很棒。我有一个NSWindowController
子类对象 ( BackupsSheetController
) 将所有这些连接起来并存在于工作表的笔尖中。
BackupsSheetController
但是,当用户编辑其中一个单元格时,我想通过适当地重新命名由该单元格表示的文件并将其放在新位置来响应该更改。由于表格视图绑定到 NSArrayController,我没有收到NSTableViewDataSource
消息– tableView:setObjectValue:forTableColumn:row:
。如果我将 BackupsSheetController 设置为 nib 中 NSTableView 对象的数据源,我有时会收到该消息,但不是很频繁,更不用说每次了。
我在该场景中看到的大多数问题和示例都通过对其表视图中的项目使用自定义模型类来处理这一切,并使某些控制器对象成为更改他们希望响应的属性的观察者。换句话说,每个项目都类似于一个 BackupNode 对象,BackupsSheetController 将观察每个项目的name
属性更改(或者我称之为的任何内容)。对于我的场景来说,这似乎完全是矫枉过正,但我也不想放弃我已经使用的绑定,而且我看不到另一种方法来做到这一点。有没有另一种方法可以做到这一点,以确保我可靠地收到setObject:...
消息?或者我应该删除 NSArrayController 并使 BackupsSheetController 成为表的委托和数据源?