核心数据引发“该文件已被其他应用程序更改”

时间:2017-08-01 19:51:11

标签: macos core-data

在核心数据应用程序中更改数据时,会出现错误消息:

  

无法保存文档“xyz.sqlite”。该文件已经存在   由另一个应用程序更改。

事实上,没有其他应用程序改变了数据。我另外观察到,撤消管理工作不顺利。

可能我不应该为一个实体使用绑定到managedObjectContext的多个(唯一的?)Arraycontroller?

在我的应用程序中,我使用经典的主 - 细节关系设置,每个实体有2个控制器 - 以及2个表视图来显示数据。

但是,此外我想提供所有细节的列表,我可以在哪里更改主人。因此,我正在使用绑定到同一个managedObjectContext的另一个Array控制器。这个没有设置为主的内容,因此它将包含所有细节对象。使用此方法可以轻松管理关联的tableview中的关系(通过简单地将“selected Object”绑定到详细信息的关系) - 但它似乎会影响应用程序。

还有其他人遇到这个问题吗?欢迎任何想法!

1 个答案:

答案 0 :(得分:0)

Mac上的核心数据从未能很好地处理基础数据的多个程序化更改,尤其是在基于文档的应用程序中。例如,请参阅autosavesInPlace causes New Document save to fail

我认为您通过对所有观看使用相同的MOC来走上正轨。如果使用多个MOC,则存在使视图之间的数据不同步的风险。在阵列控制器上使用Cocoa绑定应该保持所有内容同步。

是否存在您在后台对数据进行编程更改的情况?那些应该在viewContext的孩子身上完成。或者采取其他措施确保他们同步到viewContext