使用Window恢复功能丢失,在用户首选项中自动保存并保存在NSDocument的模型中

Joh*_*mph 11 macos cocoa save nsdocument

我在主窗口上使用NSOutlineView启动了一个基于文档的小应用程序.我在模型类中使用NSCoding协议将模型保存在文件中,一切都很好.

接下来我想保存用户界面(窗口大小和位置,大纲视图中的展开项目,选择......),我发现将恢复功能添加到Lion.

所以我尝试实现它,我在主窗口和大纲视图中添加了一个自动保存名称,设置了autosaveExpandedItems属性,并在大纲视图的数据源中实现了outlineView:itemForPersistentObject:和outlineView:persistentObjectForItem:方法.

这是有效的,但是当我创建/打开另一个文件然后关闭它时,其他文件的展开项状态将使用已关闭文件的状态进行设置.

这就像应用程序只为所有文档保存一个窗口而不为每个文档保存一个窗口.

我对自动保存和恢复有点失落,它是相同功能还是两个功能完全不同?

我可以用它来保存窗口状态还是需要我将它保存在我的模型中?

谢谢

Jos*_* E. 1

我意识到这已经晚了大约三年,但也许这会对最终来到这里的任何人有所帮助。

我还不是 Cocoa 专家或专业的 mac 开发人员(仍在学习),所以恐怕我只能提供一点点见解(我自己一直在开发基于文档的应用程序)。

可能的情况是,在每个窗口和每个控件的基础上实现保存状态数据只是将其绑定到单个实例(因为它全部预先加载在 xibs 中并绑定到单个自动保存名称),但我可能是错的对这个。任何比较了解的人都可以随时纠正我。

也许尝试将状态信息保存在 NSDocument 级别而不是窗口,然后实现window(window: NSWindow, willEncodeRestorableState state: NSCoder)window(window: NSWindow, didDecodeRestorableState state: NSCoder)从文档数据中提取。

当然,您可以轻松访问当前窗口的文档:view.window?.windowController?.document as? YourNSDocumentSubclass

这或多或少就是我正在做的事情,到目前为止似乎很有希望。其他建筑大师可能会提供更多见解。