重命名核心数据实体而不丢失数据

Posted

技术标签:

【中文标题】重命名核心数据实体而不丢失数据【英文标题】:Rename Core Data Entity without Loss of Data 【发布时间】:2020-10-28 20:37:34 【问题描述】:

我正在尝试使用 Swift、ios 13.0+ 重命名核心数据实体(不是属性)。我目前有一个名为 Image 的核心数据实体,但由于 SwiftUI 在该名称下有一个保留视图,我正在尝试将实体重命名为 FileImage

我已关注此post,但该实体下的数据不再保留在设备上/映射到新实体。关于如何重命名核心数据实体而不丢失该实体中的数据的任何建议?

【问题讨论】:

您需要为实体设置一个重命名标识符。关于这个问题还有另一个答案。 不幸的是,这仍然没有将设备上当前的数据映射到新的实体名称。 【参考方案1】:

重命名 CoreData 实体:

    首先为您的实体设置哈希修饰符和重命名 ID。重命名 ID 应与之前的实体名称匹配。

    在文件导航器中选择您的 .xcdatamodel

    选择“添加模型版本”

    在文件导航器中展开 .xcdatamodel:

    在文件属性中选择新版本的 .xcdatamodel:

    然后重命名实体名和实体类名:

在此之后,您应该在所有项目中重命名您的实体。

【讨论】:

【参考方案2】:

在这里发布给需要重命名 CoreData 实体的其他人(以避免与 SwiftUI 保留名称冲突)。

更改实体的类名称(在数据模型检查器中的类下),但不要更改实体的名称。

您现在必须将整个代码中使用的实体名称更改为新的更新类名称。 (FileImage -> Image),但 CoreData 将不再与 SwiftUI 保留关键字冲突,同时保留您的所有数据。

【讨论】:

您的问题说您想重命名实体,但您的回答说不重命名实体。这就是其他答案没有帮助的原因,因为他们回答的是您提出的问题,而不是您需要回答的问题。

以上是关于重命名核心数据实体而不丢失数据的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:在获取时重命名属性

核心数据轻量级迁移属性重命名

核心数据:仅添加或重命名一个属性时仍会发生迁移?

重命名基础表而不破坏元数据库中的仪表板

在 Entity Framework Core 中重命名外键而不删除数据

核心数据实体重命名