将窗口恢复与视觉状态保存相结合

时间:2017-08-25 02:03:58

标签: macos cocoa

我很高兴升级大型macOS应用程序以采用一些现代(10.9+)框架。

我特别热衷于采用10.7中添加的烘焙视图状态保存和恢复(-encodeRestoreStateWithCoder:-restoreStateWithCoder:-invalidateRestorableState等等。

在更新了几个窗口并查看了类之后,我发现 - 这让我很懊恼 - 这个机制只有 使用macOS来恢复退出应用程序时打开的窗口的状态。如果用户手动关闭然后重新打开它们,它就不会保留它们的状态,这就是我想要的。

Sooooooooo

我非常喜欢Cocoa提供的可恢复状态机制,并希望利用它来提供我自己的持久视图状态。我特别热衷于此,因为Cocoa已经完成了我需要的大约80%的工作(保存窗口位置,选项卡视图选择,拆分视图分隔符位置,表格标题顺序等)。

-restoreStateWithCoder:的文档指出"您还可以使用此方法将响应者重新配置为其先前的外观,"从中我推断您可以随意调用这些编码/恢复方法来保留并随后恢复窗口的视觉状态。

现在的问题是如何重复使用Cocoa的状态恢复,而不依赖于内置的窗口恢复机制。具体做法是:

  • 我假设我需要手动调用-encodeRestoreStateWithCoder 关闭窗口时窗口与我自己的NSCoder的关系 在某处保留存档的结果(用户默认值或 文件本身)。

  • 我假设我可以发送-restoreStateWithCoder: 窗口/文档重新打开,但我怎么知道Cocoa还没有 再次调用它来执行窗口恢复。或者它可能没有 问题(只允许状态恢复两次)?

  • 在窗口创建的什么位置可以安全地调用 -restoreStateWithCoder:

0 个答案:

没有答案