0

当 Core Data 应用程序处于早期开发阶段时,其托管对象模型通常处于不断变化之中。对于每个构建,都会在模型中添加或删除新的托管对象和属性。

当托管对象模型更改时,应用程序将在下次运行时崩溃并出现以下错误:

开店模式与开店模式不兼容

在这种情况下,常见的建议是从您的设备/模拟器中删除应用程序 并重新运行

这对于使用 Xcode 的开发人员来说很好,但对于参与发布过程的非技术利益相关者来说很烦人。最好不要向 CEO 或 QA 团队解释他们必须在从 TestFlight 安装更新之前删除应用程序。或字段由此问题引起的崩溃错误。

一旦模型完成了一点,我们将实施一个真正的核心数据迁移策略。

在这个开发阶段,数据丢失是可以接受的和预期的。

该方法将在应用发布前被移除。

在版本之间“迁移”对托管对象模型的更改的最简单、轻量级、可移动的调试方法是什么?这可能相当于“删除应用程序并重新运行”,但无需手动删除应用程序。

这应该处理对核心数据堆栈的所有更改,包括添加和删除托管对象和属性。

4

2 回答 2

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)
}
于 2016-05-25T01:42:23.130 回答
1

您可以在更改模型时更改商店 URL。

您甚至可以为早期开发进行模型版本控制,然后在发布之前将它们全部删除。这也可以帮助您的团队了解模型版本控制的细节。

于 2017-01-25T10:46:00.667 回答