Bre*_*don 5 cocoa nstableview nswindowrestoration
我正在基于非文档的Cocoa应用程序中进行窗口恢复.该应用程序具有类似Mail.app的界面.每个窗口代表一个帐户; 该窗口中的侧边栏列出该帐户中的会话,主区域列出所选会话中的消息.
这些列表中的每一个都是基于视图的NSTableView.对话列表绑定到NSArrayController其contentSet绑定到窗口控制器的account性能; 消息列表绑定到第二个NSArrayController,它contentSet绑定到第一个NSArrayController选择.
我已经将窗口恢复工作重新打开所有窗口并将它们与帐户对象重新关联,但我不知道如何恢复表视图的选择.这似乎不会自动发生 - 当窗口恢复时,选择了一个对象,但它不是之前选择的对象.这里发生了什么?保存和恢复选择的最简单方法是什么?
如您所知,NSTableView不会自动保存选择.
最简单的方法是将您绑定NSTableView的selectionIndexes给你Array Controller的selectionIndexes,并保存/从中检索值NSUserDefaults.然后你可以将数组控制器绑定selectionIndexes到Shared User Defaults Controller(使用Controller Key values,你可以命名你的Model Key Path任何东西).由于NSIndexSet需要存档/取消存档,因此请使用NSKeyedUnarchiveFromData值转换器.这本身就应该有效.
如果你遇到麻烦,就像选择索引重置一样,因为表视图没有立即重新填充(我怀疑你有这些问题,因为你正在填充绑定),你可以手动保存默认值.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSKeyedArchiver archivedDataWithRootObject:self.arrayController.selectionIndexes] valueForKey:vvLastSavedSelectionIndex];
Run Code Online (Sandbox Code Playgroud)
并检索它们:
NSIndexSet *selectionIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] valueForKey:vvLastSavedSelectionIndex]];
[self.arrayController setSelectionIndexes:selectionIndexes];
Run Code Online (Sandbox Code Playgroud)