我有一段时间让NSDocument的自动保存工作。
我有一个NSDocument子类,它接受一些用户输入并为该数据计算(生成)coverTree。完成后,我试图自动保存文档以捕获用户输入和结果树。我正在尝试使用调试来查找自动保存是否发生在哪里。
以下代码段来自我的视图控制器
@IBAction func handleGenerate(_ sender: NSButton)
{
...
// do the work
document.coverTree.generate(dataSet:data, source:dataSourceFinal.stringValue)
document.updateChangeCount(.changeDone)
document.autosave(withDelegate: self, didAutosave: #selector(handleDidAutosave(document:didAutosaveSuccessfully:contextInfo:)), contextInfo: nil)
}
func handleDidAutosave(document:NSDocument, didAutosaveSuccessfully:Bool, contextInfo:UnsafeMutableRawPointer)
{
print("VC::Did Autosave(document:\(document), didAutosaveSuccessfully:\(didAutosaveSuccessfully))")
print("VC::InPlace: \(Document.autosavesInPlace())")
print("VC::Autosaved at: \(document.autosavedContentsFileURL)")
}
如上所示,我提供了一个完成处理程序,用于调试。以下是我在控制台中看到的内容:
Document::updateChangeCount
VC::Did Autosave(document:<coverTreeDemo.Document: 0x6180000cd3c0>, didAutosaveSuccessfully:true)
VC::InPlace: true
VC::Autosaved at: nil
完成处理程序被告知自动保存成功(didAutosaveSucessfully设置为true),但自动保存的位置为零。我查看了〜/ Library / Autosave信息,我的应用程序(或Xcode)找不到任何内容。
我还在我的文档类中使用了每个write ...方法,以便在调用时打印到控制台。我没有看到这些输出。
那么,为什么自动保存完成处理程序被告知保存成功时出现没有写出来的东西?
请注意,我可以通过File&gt; Save菜单成功保存文档(并使用File&gt; Open将其加载回来)。启动时窗口/文档也能正确恢复IFF我通过文件&gt;保存菜单保存了它们。我只是自动保存,我遇到了问题。
非常感谢, 麦克
答案 0 :(得分:1)
简单的解决方案是 停止制造愚蠢的错误 ......
在检测我的代码以进行调试时,我覆盖了updateChangeCount以打印出一条消息(以显示它实际上是被调用的)。
我忘了调用super.updateChangeCount。 该文件从未标记为脏,因此从未自动保存。
<强>卫生署!强>