在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的
Posted
技术标签:
【中文标题】在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的【英文标题】:Easy Core Data migration during early development, when Data Loss is expected and acceptable 【发布时间】:2016-05-24 23:17:26 【问题描述】:当 Core Data 应用程序处于早期开发阶段时,其托管对象模型通常处于不断变化之中。对于每个构建,都会在模型中添加或删除新的托管对象和属性。
当托管对象模型更改时,应用程序将在下次运行时崩溃并出现错误:
开店的型号和开店的型号不兼容
common advice in this situation 用于删除应用 from your device/simulator and re-run。
这对于使用 Xcode 的开发人员来说效果很好,但对于参与发布过程的非技术利益相关者来说却很烦人。最好不要向 CEO 或 QA 团队解释他们必须在从 TestFlight 安装更新之前删除应用程序。或字段由此问题引起的崩溃错误。
一旦模型完成了一点,我们将实施真正的核心数据迁移策略。
在此开发阶段,数据丢失是可以接受的,也是可以预期的。
此方法将在应用发布前被移除。
在版本之间“迁移”对托管对象模型的更改的最简单、轻量级、可移动的调试方法是什么?这可能相当于“删除应用并重新运行”,但无需手动删除应用。
这应该处理对核心数据堆栈的所有更改,包括添加和删除托管对象和属性。
【问题讨论】:
【参考方案1】:在这种情况下,我会检查与当前模型的兼容性,然后如果需要迁移,则删除 SQLite 数据库。
考虑使用(在 Objective-C 中)
// error, sourceStoreURL, theManagedObjectModel are valid
NSDictionary *storeMetadata=[NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType
URL: sourceStoreURL error: &error];
BOOL storeIsCurrent=[theManagedObjectModel isConfiguration: nil
compatibleWithStoreMetadata: storeMetadata];
if (!storeIsCurrent)
// Alert user
// Delete on-disk store via sourceStoreURL
// (including -wal and -shm files if journaling enabled)
【讨论】:
执行此操作时,请确保删除除持久存储文件之外的日志文件 - 即同一位置的-wal
和 -shm
文件。否则你可能会发现旧数据实际上并没有消失。
谢谢@TomHarrington。我将编辑答案以包含这个关键点。【参考方案2】:
您可以在更改模型时更改商店 URL。
即使是早期开发,您也可以进行模型版本控制,然后在发布之前将它们全部删除。这也可以帮助您的团队了解模型版本控制的细节。
【讨论】:
以上是关于在早期开发过程中轻松迁移核心数据,此时数据丢失是可以接受的的主要内容,如果未能解决你的问题,请参考以下文章
助力银行核心下移,监控分布式数据库,融天鹰眼轻松应对五大挑战