我在Sierra(10.12.5)运行的基于NSDocument的macOS应用程序出现了奇怪的情况:
当点击发生时,moveToURL:completionHandler 不被调用。 Ditto writeSafelyToURL。我无法在NSDocumentTitlebarPopoverView或垃圾箱或其他任何地方显示的文件夹中找到无标题文件。我已经在我能想到的每个方法上设置了符号断点(removeItemAtURL,moveItemAtURL,...),并在我的NSDocument子类中设置断点,以查看是否调用了presentsItemDidMoveToURL(nope)。
如果我单击文件夹弹出窗口并选择另一个文件夹-moveToURL则会被调用。我可以在那里设置一个断点并打印autosavedContentsFileURL,看它是否认为它仍然处于神秘消失的原始位置。继续我看到writeSafelyToURL被调用,文档在新位置重建。
奇怪的是,即使单击标题栏,在此启动会话期间创建的后续新的无标题项目仍保留在指定的临时文件夹位置。直到你给它一个名字来移动文件,并正确调用-moveToURL。这也是我第一个无标题项目需要发生的事情。
重新启动应用后,第一个无标题文档将显示消失的临时文件的问题。
其他说明:-isEntireFileLoaded返回NO。这也发生在El Capitan上。我的应用程序没有沙盒。无标题的临时文件夹位于〜/ Library / Application Support / MyApp中。使用fs_usage进行跟踪也没有提供任何线索。
还有什么我应该探索的吗?我真诚地感谢任何其他想法...
更新:另一个关键点是我重写writeSafelyToURL来编写我的包信息。使用正常的writeSafelyToURL会指示writeToURL先写入tmp位置,然后在完成后将其移动到真正的文件URL。在我的情况下,我想写到位,因为我的包大小可能是几百兆字节,所以我只写了改变的内部数据文件。