我在主窗口上使用NSOutlineView启动了一个基于文档的小应用程序。 我在模型类中使用NSCoding协议将模型保存在文件中,一切都很好。
接下来我想保存用户界面(窗口大小和位置,大纲视图中的展开项目,选择......),我发现将恢复功能添加到Lion。
所以我尝试实现它,我在主窗口和大纲视图中添加了一个自动保存名称,设置了autosaveExpandedItems属性,并在大纲视图的数据源中实现了outlineView:itemForPersistentObject:和outlineView:persistentObjectForItem:方法。 / p>
这样可行,但是当我创建/打开另一个文件然后关闭它时,其他文件的展开项状态将使用已关闭文件的状态进行设置。
就像应用程序只为所有文档保存一个窗口而不是每个文档只保存一个窗口。
我对自动保存和恢复有点失落,是同一个功能还是两个完全不同的功能?
我可以用它来保存窗口状态还是需要我将它保存在我的模型中?
谢谢
答案 0 :(得分:0)
我意识到这已经太晚了3年,但也许这会对任何最终到此的人有所帮助。
我绝不是Cocoa专家或专业mac开发人员(仍在学习),所以我担心我只能提供一些洞察力(我自己一直致力于基于文档的应用程序)。
可能的情况是,在每个窗口和每个控件的基础上实现保存状态数据只是将它绑定到单个实例(因为它全部预先加载到xib中并绑定到单个自动保存名称),但是我这可能是错的。任何知识渊博的人都可以随意纠正我。
也许尝试在NSDocument级别而不是窗口中保存状态信息,然后实现window(window: NSWindow, willEncodeRestorableState state: NSCoder)
和window(window: NSWindow, didDecodeRestorableState state: NSCoder)
以从文档数据中提取。
您当然可以轻松访问当前窗口的文档:view.window?.windowController?.document as? YourNSDocumentSubclass
这或多或少是我正在做的事情,到目前为止似乎很有希望。其他建筑专家可能会提供更多见解。