我正在使用一个非基于文档的Cocoa应用程序进行窗口恢复。这个应用程序有一个类似Mail.app的界面。每个窗口代表一个帐户;该窗口中的侧边栏列出该帐户中的对话,主区域列出所选对话中的消息。
这些列表中的每一个都是基于视图的NSTableView。会话列表绑定到NSArrayController,其contentSet绑定到窗口控制器的account属性;消息列表绑定到第二个NSArrayController,其contentSet绑定到第一个NSArrayController的选择。
我已经完成了窗口恢复工作,可以重新打开所有窗口并将它们与帐户对象重新关联,但我不知道如何恢复表视图的选择。这似乎不是自动发生的-当窗口被恢复时,一个对象被选中,但它不是之前被选中的那个。这里发生了什么事?保存和恢复选择的最简单方法是什么?
发布于 2012-08-09 01:24:40
正如你所意识到的,NSTableView不会自动保存选择。
最简单的方法是将NSTableView的selectionIndexes绑定到Array Controller的selectionIndexes,并从NSUserDefaults保存/检索值。然后,您可以将数组控制器的selectionIndexes绑定到Shared User Defaults Controller (使用Controler键values,您可以为Model Key Path命名任何名称)。因为<代码>D10需要存档/未存档才能存储,所以使用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];https://stackoverflow.com/questions/11861693
复制相似问题