【问题标题】:Renaming a core data property within an NSManagedObject class重命名 NSManagedObject 类中的核心数据属性
【发布时间】:2014-09-28 14:00:12
【问题描述】:

我想重命名一个属性,sortOrder:

sequence,在 NSManagedObject 类中。 (仅示例说明)

并且已经按照轻量级迁移的步骤

挑战在于轻量级迁移实际上不会影响 NSManagedObject 类 (FormItems)。

所以代码仍然使用sortOrder 属性。我可以通过 XCode 运行重构重命名来更改代码,但是由于类中的重命名,这会破坏我的向后 DB 兼容性吗?

我在这里误解了什么?

【问题讨论】:

    标签: objective-c core-data xcode5


    【解决方案1】:

    轻量级迁移应该可以按预期工作。此声明

    挑战在于轻量级迁移实际上不会影响 NSManagedObject 类 (FormItems)。

    不一定是真的。它 LW 迁移应该影响所有更改的实体。

    您可以重构代码以使用新名称和

    1. 创建一个新的模型版本。
    2. 在更改为新模型版本后对属性进行更改
    3. 确保持久存储具有正确的选项。
      NSMigratePersistentStoresAutomaticallyOption
      NSInferMappingModelAutomaticallyOption

    【讨论】:

    • 那我还需要为“重命名 ID”而烦恼吗?
    • 不,它应该——正如它所说的——“自动”。
    【解决方案2】:
    1. 如@Mundi 所述,您需要创建一个新的模型版本。
    2. 之后,您需要在代码中将 sortOrder 重命名为序列。
    3. 在映射模型中,属性“sequence”的值表达式为 $source.sortOrder。这将在迁移后保留所有以前的值。

    【讨论】:

    • 那么我的sequence .xcmappingmodel 中的属性有一个空白表达式是怎么回事? ://
    • 对于核心数据,不是重命名属性。它正在创建一个新属性并删除一个旧属性。它不会在两者之间自动映射数据。如果将值表达式保留为空白,则会丢失排序顺序属性中的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多