在重新打开文件时,以编程方式保存原因文档以考虑其他应用程序更改文档

时间:2010-10-06 13:07:39

标签: objective-c cocoa

这很奇怪,我非常感谢所有的帮助=)

我有一个基于文档的应用程序,应该可以对文档文件执行某些操作。为此,我每次调用文档操作时都会保存文档。为此,我使用的方法是:

  

saveDocumentWithDelegate:didSaveSelector:contextInfo:

问题是,当关闭文档时,从最近的文件菜单重新打开它然后再次执行操作我会看到对话框说明

  

自您打开或保存文档以来,该文档的文件已被其他应用程序更改。

但是,使用保存菜单项时不是这种情况。

我尝试过不同的保存方法:

  

saveToURL:ofType:forSaveOperation:错误:

即使这导致了我正在寻找的行为,也会产生副作用:执行操作后,保存菜单项会被取消激活。

所以我的问题是:我应该如何以编程方式正确执行保存操作?我查看了文档,但我没有看到任何看似明显的解决方案。

感谢所有帮助。感谢

2 个答案:

答案 0 :(得分:1)

在我的案例中,我找到了解决此问题的方法。 覆盖configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error: NSPersistentDocument方法的选项存在问题。我删除字符串

时问题解决了
[options setObject:[NSNumber numberWithBool:YES] forKey:NSSQLiteManualVacuumOption]

我出于某种原因使用了真空选项。不知道如何但它导致了保存问题。当我拒绝这个选项时,问题就消失了。

答案 1 :(得分:-1)

要让它按您的需要运行,您可以使用saveToURL: ...方法修复它,然后调用-[NSWindow setDocumentEdited:]或 - [NSDocument updateChangeCount:]来停止菜单项从被禁用。

但是,我不确定你的整体方法是否正确。如果你有一个保存菜单项,我不认为你应该自动保存除非你使用Lion的自动保存功能(推荐),在这种情况下你会调用不同的方法。

即使你现在决定坚持自动保存,为什么你不想要禁用菜单项呢?它已被禁用,因为没有保存更改。

为什么要自动保存文件?