我有一个基于NSDocument的应用程序,其中包括一个NSDocumentController子类。 我的NSDocument可以处理文件URL和使用Web服务的自定义方案的URL。
我使用自定义代码处理许多加载和保存操作,包括-saveToURL:ofType:forSaveOperation:completionHandler:
。 +autosavesInPlace
返回YES
。
我遇到的问题是:具有自定义URL方案的文档在启动时无法恢复。 具有文件URL方案的文档可以恢复 - 包括保存在文件中的常规文档和自动保存的未命名文档。
在打开基于服务器的文档并退出应用程序后,重新启动时似乎没有调用任何NSDocument方法。 特别是,四个初始化方法之一都没有被调用:
- -init
- -initWithContentsOfURL:ofType:error:
- -initForURL:withContentsOfURL:ofType:error:
- -initWithType:error:
NSDocumentController方法-reopenDocumentForURL:withContentsOfURL:display:completionHandler:
也没有被调用。
文档的可恢复状态是如何编码的?何时编码?何时解码?
-encodeRestorableStateWithCoder:
实现中编码文档状态(编号ID、URL、是否有最近更改、类型)。NSDocumentController使用该状态信息来恢复文档,然后调用-makeWindowControllers
和NSApplication(或NSApplication的完成处理程序?)来恢复窗口。此外,在使用NSDocumentController的自定义子类时,AppKit将该类设置为“restorationClass”。 - paulmelnikow