Macos NSDocumentTitleBarpoOverviewController在第一次单击时移动未命名的NSDocument文件

Macos NSDocumentTitleBarpoOverviewController在第一次单击时移动未命名的NSDocument文件,macos,nsdocument,Macos,Nsdocument,我在Sierra(10.12.5)上运行基于NSDocument的macOS应用程序时遇到了一个奇怪的情况: 启动应用程序 创建新的无标题文档 代码正在使用setAutosavedContentsFileURL设置临时文件位置。我可以看到文件包是在那里创建的。(+AutoSavesInput返回是,顺便说一句) 单击标题栏以显示NSDocumentTitleBarpoOverview 立即,只要打开弹出窗口,临时文档就会从临时文件夹移动到我找不到的地方(或者完全删除?) 单击发生时,Move

我在Sierra(10.12.5)上运行基于NSDocument的macOS应用程序时遇到了一个奇怪的情况:

  • 启动应用程序
  • 创建新的无标题文档
  • 代码正在使用setAutosavedContentsFileURL设置临时文件位置。我可以看到文件包是在那里创建的。(+AutoSavesInput返回是,顺便说一句)
  • 单击标题栏以显示NSDocumentTitleBarpoOverview
  • 立即,只要打开弹出窗口,临时文档就会从临时文件夹移动到我找不到的地方(或者完全删除?)
单击发生时,MoveTour:completionHandler未被调用。同上,写入安全URL。我在NSDocumentTitleBarpoOverview中显示的文件夹、垃圾箱或其他任何地方都找不到该无标题文件。我已经在我能想到的每个方法上设置了符号断点(removitematrol,moveitematrol,…),并在我的NSDocument子类中设置了断点,以查看是否调用了PresentedItemMoveTourl(nope)

如果单击文件夹弹出窗口并选择其他文件夹,则会调用moveToURL。我可以在那里设置一个断点并打印autosavedContentsFileURL,以查看它是否认为它仍然在它神秘消失的原始位置。继续,我看到WriteSafeyToUrl被调用,文档在新位置被重建

奇怪的是,即使单击标题栏,在此启动会话期间创建的后续新的无标题项目仍保留在指定的临时文件夹位置。直到您给它一个名称,文件才会被移动,并且正确地调用了-moveToURL。这也是我在第一个无标题项目中需要做的

重新启动应用程序后,第一个无标题文档将显示消失临时文件的问题

其他注意事项:-isEntireFileLoaded返回编号。El Capitan上也会发生这种情况。我的应用程序没有沙盒。无标题的临时文件夹位于~/Library/Application Support/MyApp中。使用fs_进行跟踪也没有提供任何线索

还有什么我应该探究的吗?我真诚地感谢任何其他想法


更新:另一个关键点是我正在重写WriteSafeyToUrl以写入我的包信息。使用普通writeSafelyToURL将首先指示writeToURL写入tmp位置,然后在完成后,将其移动到真正的文件URL。在我的例子中,我希望就地写入,因为我的包可能有数百兆字节的大小,所以我只写入更改的内部数据文件。

何时在initWithType的NSDocument子类中设置
autosavedContentsFileURL
?何时在initWithType的NSDocument子类中设置
autosavedContentsFileURL