【问题标题】:Objective C - Upgrading NSManagedObjectObjective C - 升级 NSManagedObject
【发布时间】:2012-01-16 13:52:34
【问题描述】:

不久前我创建了一个应用程序,它使用 Core Data 来存储信息。今天,我对数据模型进行了一些更改,并重新创建了我更改数据模型的代码文件。当我再次尝试在 iPad 上运行该应用程序时,它抱怨当前 iPad 上的数据存储与我尝试访问的数据存储之间存在冲突(我向其中一个对象添加了一个字段)。我通过从 iPad 上完全删除应用程序并将其替换为新版本来解决此问题。

我现在只是想知道,当我发布更新时,对当前使用该应用程序的用户会有什么影响?他们还会丢失所有数据吗?他们会遇到那个丑陋的错误信息或崩溃吗?还是 Core Data 会神奇地为我升级数据存储?

问候, EZFrag

【问题讨论】:

    标签: objective-c ipad core-data


    【解决方案1】:

    请参阅 Apple 核心数据迁移指南:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

    “您只能使用用于创建它的托管对象模型打开 Core Data 存储。因此,更改模型将使其与之前创建的存储不兼容(因此无法打开)。如果您更改模型,因此,您需要将现有商店中的数据更改为新版本——更改商店格式称为迁移。

    要迁移商店,您需要用于创建商店的模型版本以及要迁移到的模型的当前版本。您可以创建包含多个版本的托管对象模型的版本化模型。在版本化模型中,您将一个版本标记为当前版本。然后,Core Data 可以使用此模型打开使用任何模型版本创建的持久存储,并将存储迁移到当前版本。但是,为了帮助 Core Data 执行迁移,您可能必须提供有关如何从一个模型版本映射到另一个版本的信息。此信息可能是版本化模型本身内的提示形式,也可能是您创建的单独映射模型文件中的形式。”

    【讨论】:

    • 此外,我建议从自动迁移开始,因为它很好地涵盖了大多数数据模型更改的情况。
    【解决方案2】:

    对于开发,您需要将其从您的设备或模拟器中移除。
    对于部署,您需要经历一个相当不愉快的过程!它在文档中进行了描述,但基本上您需要创建另一个版本的数据存储并将您的数据(如果您有任何需要迁移的内容)迁移到新版本。 如果您不需要迁移任何数据,您的生活会更轻松。

    如果是企业应用,或者您可以要求用户删除并重新安装该应用,那么您无需太担心。

    看到这个http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

    【讨论】:

    • 我不同意这是一个不愉快的情况。每当您在任何框架中更改数据模型时,都必须迁移。事情就是这样运作的。 Core Data 让 90% 的迁移案例变得非常容易。
    • 与其他框架相比,Coredata 可能更容易,但对我来说仍然“不开心”。我承认我不应该说那么主观的话,但我坚持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多