gpt4 book ai didi

ios - 核心数据轻量级迁移 - 现有实体是否添加了新属性?

转载 作者:行者123 更新时间:2023-11-28 21:30:02 25 4
gpt4 key购买 nike

我有一个 Core Data 托管对象模型,所有这些模型都在 iOS 应用程序中设置和工作,我正在使用 NSManagedObject 子类,这些子类是使用 [[MyEntityClass alloc] initWithEntity:description insertIntoManagedObjectContext:context];

我一直在阅读一些关于 Core Data 迁移的教程,为应用程序将来可能的更新做准备。对于我目前为这个特定案例设想的变化,我相信轻量级迁移就足够了。我了解轻量级迁移将数据从旧数据模型映射到新版本。但是有一件事我不清楚。如果持久存储包含在迁移之前创建的 NSManagedObject 子类实例,这些对象是否会随模型一起修改以允许它们使用迁移中添加的属性?

我将举一个例子来确保我清楚我在问什么。假设我有一个名为 Person 的实体,使用经典示例。 Person 具有以下属性:

firstname
lastname

我创建了一个名为 aPersonPerson 实例,并将其插入到持久存储中。我可以使用 aPerson.firstnameaPerson.lastname 访问 aPerson 的属性。

现在我将 dateofbirth 属性添加到托管对象模型,因此 Person 实体包含以下属性:

firstname
lastname
dateofbirth

现在,如果我从持久存储中检索 aPerson 并尝试访问 aPerson.dateofbirth 会发生什么?我是否会收到无法识别的选择器错误,因为 aPerson 不包含 dateofbirth 属性,因为它是在添加该属性之前创建的?或者轻量级迁移是否会将 dateofbirth 属性和访问器方法添加到持久存储中已有的所有 Person 实例?

最佳答案

如果您向新模型版本添加属性,则该属性必须是可选的或者您必须指定默认值。否则,使用旧模型保存的持久存储将无法使用新模型进行验证。

在您的示例中,指定默认的 dateofbirth 没有任何意义,因此您可以将该属性设置为可选属性,并应对它有时不存在的情况。

我找不到关于此的明确文档。您应该非常彻底地测试迁移。

关于ios - 核心数据轻量级迁移 - 现有实体是否添加了新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36494188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com