Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 以编程方式保存会使文档在重新打开文件时认为其他应用程序更改了文档_Objective C_Cocoa - Fatal编程技术网

Objective c 以编程方式保存会使文档在重新打开文件时认为其他应用程序更改了文档

Objective c 以编程方式保存会使文档在重新打开文件时认为其他应用程序更改了文档,objective-c,cocoa,Objective C,Cocoa,这很奇怪,我非常感谢所有的帮助=) 我有一个基于文档的应用程序,可以对文档文件执行一些操作。为此,每次调用文档操作时,我都会保存文档。为此,我使用以下方法: saveDocumentWithDelegate:didSaveSelector:contextInfo: 问题是,当关闭文档,从“最近使用的文件”菜单重新打开文档,然后再次执行该操作时,我会看到一个对话框,上面说 此文档的文件在您打开或保存后已被其他应用程序更改 但是,使用“保存”菜单项时,情况并非如此 我尝试了不同的保存方法: save

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

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

saveDocumentWithDelegate:didSaveSelector:contextInfo:

问题是,当关闭文档,从“最近使用的文件”菜单重新打开文档,然后再次执行该操作时,我会看到一个对话框,上面说

此文档的文件在您打开或保存后已被其他应用程序更改

但是,使用“保存”菜单项时,情况并非如此

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

saveToURL:类型:forSaveOperation:错误:

即使这导致了我正在寻找的行为,也有一个副作用:执行操作后,“保存”菜单项将被停用

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


感谢所有的帮助。谢谢

要让它按您的意愿工作,您可能可以使用
savetour:
来修复它。。。方法,然后调用
-[NSWindow setDocumentEdited:
或-
[NSDocument updateChangeCount::
,这将停止禁用菜单项

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

即使你决定像现在一样坚持自动保存,你为什么不希望菜单项被禁用呢?它被禁用,因为没有要保存的更改


为什么要自动保存文件?

我找到了解决这个问题的方法。 问题出在重写
configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:
NSPersistentDocument的方法中。当我删除字符串时,问题就解决了

[options setObject:[NSNumber numberWithBool:YES] forKey:NSSQLiteManualVacuumOption]

出于某种原因,我使用了真空选项。不知道是怎么回事,但这导致了储蓄问题。当我拒绝此选项时,问题已消失。

这是基于CoreData的文档应用程序吗?。如果您显式调用[myManagedObjectContext save:&error],您将获得此效果。不,它不是基于CoreData的文档应用程序。。。我还尝试在document对象上调用saveDocument:。。。同样的效果(重新打开文件时的对话框),我在一个基于核心数据文档的应用程序中也看到过这种行为,可以证明我在保存时没有做任何特别的事情。唯一常见的主题是调用-saveDocument:from-in-code,根据用户的偏好,在执行某些操作后自动保存文档。hmmm。。我不知道该怎么办。。这很奇怪。。我想我会研究更多的文档=)那么,使用基于核心数据的NSPersistentDocument避免此类警报的推荐方法是什么?我目前正在做一个
if(moc.hasChanges)[moc save:&error]