将 Core Data 数据库保存到 sqlite 文件会丢失一些递归/循环关系信息

Posted

技术标签:

【中文标题】将 Core Data 数据库保存到 sqlite 文件会丢失一些递归/循环关系信息【英文标题】:Saving Core Data database to sqlite file loses some recursive/circular relationship information 【发布时间】:2010-10-23 17:11:06 【问题描述】:

我的 iPhone 文字游戏中有非常简单的循环(或自反射)关系核心数据模型。 实体词与指向相关词的自身具有一对多关系:

我使用 NSPersistentDocument Core Data Mac OS X 模板应用程序将单词导入 Core Data sqlite 数据库。

导入数据后,我可以看到所有关系都被正确导入(每个词至少有一个或多个相关词)。

但是,将数据库保存到 sqlite 文件并再次重新打开后,相关单词会大量丢失指针(单词仍然存在但关系消失 - NSLog 显示它们为空强>)。有时可能会丢失高达 50% 的相关词信息。

当我将我的数据库存储为 XML 或二进制 文件并重新打开它时,所有关系都被正确保存。

谁能指出我当同一个数据库的 XML 和二进制版本正确存储所有内容时,为什么保存到 sqlite 文件会导致一些关系数据丢失

我对 sqlite 很感兴趣,因为它认为在 iPhone 中使用时(内存)效率更高,并且当然会产生更小的数据库文件大小。

【问题讨论】:

正如 Dave 所指出的,这是一对多的关系。我同意。我的错。无论如何,它不会改变保存到 XML 或二进制文件的事实不会使我的一半递归关系无效,而 sqlite 会这样做。 【参考方案1】:

这不是一对多的关系。那是一对多的关系。它没有逆。你可以看出这一点,因为线条的一端只有箭头。尝试添加反向关系,看看是否有帮助。

【讨论】:

感谢您的具体说明。我更愿意保持这种松散的关系。无论如何:其他格式(XML 和二进制)正确保存这种关系的原因是什么?

以上是关于将 Core Data 数据库保存到 sqlite 文件会丢失一些递归/循环关系信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQLite 文件预加载 Core Data,该文件引用使用“外部存储”保存的图像?

Core Data 对象有时不会保存到永久存储中

iPhone Core Data 对象添加到 NSMutableArray

将 mogenerator 与 Core Data 实体一起使用会导致保存数据存储时出错

ios Core Data - 我的保存按钮不起作用

Core Data基础