NSDocument:文档无法自动保存。该文件已被其他应用程序更改

时间:2012-06-09 02:37:54

标签: macos nsdocument nspersistentdocument

搜索这篇文章的标题后发现它很常见;的确,我从Xcode那里得到了这个错误。但我似乎无法找到任何修复。我现在在运行程序时看到它,它似乎发生在调用changeCountTokenForSaveOperation期间或之后。它似乎与撤销管理器有关,而不是与我使用核心数据这一事实有关,但我可能错了。

是否有人知道导致此问题的原因或解决方法?

3 个答案:

答案 0 :(得分:1)

在NSPersistentDocument类的managedObjectContext上执行代码手动保存时,NSPersistentDocument可能会发生此错误。这里的问题是你正在修改NSPersistentDocument后面的磁盘上的文件。只需将保存操作保留到NSPersistentDocument,就不会发生错误。

答案 1 :(得分:1)

问题是手动保存managedObjectContext。因此正确的解决方案是避免手动保存。如果无法避免,则可以重写NSDocument的fileModificationDate方法以返回文件的当前文件修改日期。这样,文档不会显示错误消息。

- (NSDate *)fileModificationDate {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary *attrs = [fileManager attributesOfItemAtPath:self.fileURL.path error:NULL];
    return attrs[NSFileModificationDate];
}

答案 2 :(得分:-3)

我认为这与您可以通过Apple单击方法名称导航到其他文件这一事实有关。如果您在一个文件中进行更改然后导航到另一个文件,则会将上一个窗口留在后面。您可以单击“后退”三角形再次到达它(即位于文件窗口左上角的上方)。但是,如果它在那个现在已经黯然失色的窗口中有未保存的更改,并且您在另一个选项卡或窗口中再次编辑同一个文件,XCode会询问您将哪一个与上述消息保持一致。

当它发生时,我将磁盘上的文件复制到一个新名称,然后选择“Save Anyway”并比较这两个文件。不幸的是,有时每个文件都有重要的变化,我必须手动合并它们。

我很沮丧,我可以哭。