我很高兴升级大型macOS应用程序以采用一些现代(10.9+)框架。
我特别热衷于采用10.7中添加的烘焙视图状态保存和恢复(-encodeRestoreStateWithCoder:
,-restoreStateWithCoder:
,-invalidateRestorableState
等等。
在更新了几个窗口并查看了类之后,我发现 - 这让我很懊恼 - 这个机制只有 使用macOS来恢复退出应用程序时打开的窗口的状态。如果用户手动关闭然后重新打开它们,它就不会保留它们的状态,这就是我想要的。
Sooooooooo
我非常喜欢Cocoa提供的可恢复状态机制,并希望利用它来提供我自己的持久视图状态。我特别热衷于此,因为Cocoa已经完成了我需要的大约80%的工作(保存窗口位置,选项卡视图选择,拆分视图分隔符位置,表格标题顺序等)。
-restoreStateWithCoder:
的文档指出"您还可以使用此方法将响应者重新配置为其先前的外观,"从中我推断您可以随意调用这些编码/恢复方法来保留并随后恢复窗口的视觉状态。
现在的问题是如何重复使用Cocoa的状态恢复,而不依赖于内置的窗口恢复机制。具体做法是:
我假设我需要手动调用-encodeRestoreStateWithCoder
关闭窗口时窗口与我自己的NSCoder的关系
在某处保留存档的结果(用户默认值或
文件本身)。
我假设我可以发送-restoreStateWithCoder:
窗口/文档重新打开,但我怎么知道Cocoa还没有
再次调用它来执行窗口恢复。或者它可能没有
问题(只允许状态恢复两次)?
在窗口创建的什么位置可以安全地调用
-restoreStateWithCoder: