11

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

接下来,我想保存用户界面(窗口大小和位置、大纲视图中的扩展项目、选择...),我发现 Lion 中添加了 Resume 功能。

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

那行得通,但是当我创建/打开另一个文件然后关闭它时,其他文件的扩展项状态将设置为关闭文件的状态。

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

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

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

谢谢

4

1 回答 1

1

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

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

可能的情况是,在每个窗口和每个控件的基础上实现保存状态数据只是将其绑定到单个实例(因为它全部预加载在 xibs 中并绑定到单个自动保存名称),但我可能是错的对这个。哪位懂行的可以指正。

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

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

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

于 2016-05-04T04:05:20.587 回答