【问题标题】:Lost with Window resume feature, autosave in user preferences and save in model for NSDocument丢失窗口恢复功能,自动保存在用户首选项中并保存在 NSDocument 的模型中
【发布时间】:2012-11-07 15:00:53
【问题描述】:

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

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: macos cocoa save nsdocument


    【解决方案1】:

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

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

    在每个窗口和每个控件的基础上实现保存状态数据可能只是将其绑定到单个实例(因为它全部预加载在 xibs 中并绑定到单个自动保存名称),但我这可能是错误的。有了解的朋友欢迎指正。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多