5

我正在一个非基于文档的 Cocoa 应用程序中进行窗口恢复。该应用程序具有类似 Mail.app 的界面。每个窗口代表一个帐户;该窗口中的边栏列出了该帐户中的对话,主区域列出了所选对话中的消息。

这些列表中的每一个都是基于视图的NSTableView. 会话列表绑定到一个绑定到窗口控制器属性NSArrayController的对象;消息列表绑定到第二个,第二个绑定到第一个的选择。contentSetaccountNSArrayControllercontentSetNSArrayController

我已经完成了我的窗口恢复工作,它重新打开了所有窗口并将它们与帐户对象重新关联,但我不知道如何恢复表视图的选择。这似乎不会自动发生——当窗口恢复时,选择了一个对象,但它不是之前选择的那个。这里发生了什么?保存和恢复选择的最简单方法是什么?

4

1 回答 1

5

正如您所意识到的,NSTableView不会自动保存选择。

最简单的方法是将你NSTableView的 's绑定selectionIndexes到你Array Controller的 's上selectionIndexes,然后从NSUserDefaults. 然后你可以将阵列控制器绑定selectionIndexesShared User Defaults Controller(使用控制器密钥values,你可以命名你的Model Key Path任何东西)。因为NSIndexSet需要存档/取消存档才能存储,所以使用NSKeyedUnarchiveFromData值转换器。这本身就应该起作用。


如果您在重置选择索引时遇到问题,因为表格视图没有立即重新填充(我怀疑您会遇到这些问题,因为您正在填充绑定),您可以手动保存默认值。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSKeyedArchiver archivedDataWithRootObject:self.arrayController.selectionIndexes] valueForKey:vvLastSavedSelectionIndex];

并检索它们:

NSIndexSet *selectionIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] valueForKey:vvLastSavedSelectionIndex]];
[self.arrayController setSelectionIndexes:selectionIndexes];
于 2012-08-08T17:24:40.150 回答