objective-c - 核心数据: Database migration causes duplicates

标签 objective-c macos cocoa core-data

很少有客户报告核心数据迁移后,他们的数据库条目结果重复。

我们打开了他们发送给我们的数据库,确实条目是重复的。我们恢复备份并再次转换数据库,但我们无法在办公室重现该问题。迁移正常进行。

这种重复的原因可能是什么?是和模型的结构有关,还是别的什么?

这是使用模型映射的轻量级迁移。核心数据数据库基于mysql。

谢谢

最佳答案

经过一段时间的斗争后,解决方案对我们来说非常明显。由于这种情况只会非常偶尔发生,因此很难找到重现(更难找到原因!)。

应用程序似乎有时会在迁移过程中崩溃(出于未知原因)。

我们在 -[NSMigrationManager migrateStoreFromURL:...] 中为 destinationURL 使用确定性文件名,例如 appdata.sqlite-model_version_2.3 >。我们在迁移之前没有检查目标是否存在,并且 NSMigrationManager 会直接复制到其中。因此,我们会从第一次(崩溃的)尝试中获得每个实体的重复项,并且单选之后的一切。

一些 -[NSFileManager removeItemAtPath:error:] 调用 .sqlite.sqlite-shm.sqlite -wal 在尝试迁移之前清理任何以前失败的迁移已经为我们解决了问题。

关于objective-c - 核心数据: Database migration causes duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302789/

相关文章:

macos - Mac OS X - 应用程序演示文件的最佳位置?

objective-c - 解密Cocoa中的RSA公钥

macos - 拦截 os x 中的全局音频输出?

javascript - 使用 JXA 以编程方式创建和填充 NSWindow

iphone - 多个释放消息导致 EXC_BAD_ACCESS 崩溃

objective-c - Touch Bar,如何添加可滚动的按钮列表?

objective-c - 关于自动引用计数,我需要了解什么?

.net - Mac 上的 Jenkins 和 MSBuild

objective-c - Objective C 从另一个应用程序中检索数据

macos - cocoa 滚动图像菜单