当Core Data应用程序处于早期开发阶段时,其管理对象模型通常会不断变化。对于每个构建,都会在模型中添加或删除新的托管对象和属性。
当托管对象模型发生更改时,应用程序将在下次运行时崩溃并显示错误:
用于打开商店的模型与用于创建商店的模型不兼容
common advice in this situation将删除应用 from your device/simulator and re-run。
这适用于使用Xcode的开发人员,但对于参与发布过程的非技术利益相关者来说却很烦人。最好不要向CEO或QA团队解释他们必须在从TestFlight安装更新之前删除应用程序。或者由此问题导致崩溃的bug。
模型最终确定后,我们将实施真正的核心数据迁移策略。
在这个开发阶段,数据丢失是可以接受和预期的。
在发布应用程序之前,将删除此方法。
在发布版之间“迁移”对托管对象模型的更改的最简单,轻量级,可移动,调试方式是什么?这可能相当于“删除应用并重新运行”,但无需手动删除应用。
这应该处理对Core Data堆栈的任何和所有更改,包括添加和删除托管对象和属性。
答案 0 :(得分:2)
在这种情况下,我会检查当前模型的兼容性,然后在需要迁移的情况下删除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)
}
答案 1 :(得分:1)
您可以在更改模型时更改商店URL。
即使是早期开发,您也可以进行模型版本控制,然后在发货前将其全部删除。这也可以帮助您的团队了解模型版本的细节。