资讯专栏INFORMATION COLUMN

CoreData整理(四)——数据迁移和其他问题

Nekron / 753人阅读

摘要:整理四数据迁移和其他问题目录轻量级数据迁移后续遇到的问题轻量级数据迁移在做版本的迭代过程中,难免会遇到要修改文件,比如新增或删除一个实体增加或删除一个原有实体的属性等。

CoreData整理(四)——数据迁移和其他问题 目录

轻量级数据迁移

后续遇到的问题

轻量级数据迁移

在做app版本的迭代过程中,难免会遇到要修改.xcdatamodeld文件,比如新增或删除一个实体、增加或删除一个原有实体的属性等。如果你没有设置数据迁移的话,app更新后原有的数据将会被清空,这当然是不行的,所以此时需要进行数据的迁移操作。
core data可以设置轻量级的数据迁移,系统自动会帮你分析差异,进行映射,这种方式只适用于简单的增删实体或是增删属性等操作。除此之外还有一种相当复杂的自定义数据迁移,一般来说不会用到,本文不打算进行说明。

1.在Core Data栈中设置自动迁移功能

在PSC的实例化方法中添加自动迁移的相关设置。

如果你使用了MagicalRecord,只需要将之前初始化CoreDataStack的方法setupCoreDataStack 修改成使用 setupAutoMigratingCoreDataStack进行初始化。

2.添加新的CoreData版本,并切换到新版本

选中.scdatamodeld文件后,依次点击菜单项中的Editor->Add Model Version...

此时.xcdatatmodeld文件就可以展开看到其包含的多个版本

根据下图所示的步骤即可将当前版本切换至你想要的版本

此时就可以在新版本上进行修改了

ps:

开启轻量级自动迁移之后,app每次启动都会判断实体与数据库表结构是否存在差异,如果存在差异,则会更新数据库文件,更新为新的表结构。

如果在原有实体上增加了新属性,则迁移后的数据中该字段为空;如果在原有实体上减少了属性,那么迁移后的数据中该字段会被删掉,对应的数据也会被删除,即使你再切回到原始的版本,数据也不会恢复。

后续遇到的问题 问题1:Core Data创建ManageObjectClass之后报模型重复定义错误

通过Editor->Create NSManageObject Sublass...创建出MO类,报如下错误:

解决:
自Xcode 8起,Core Data中Entity的NSManagedObject Subclass默认由Xcode自动生成,并且无法在Project Navigator中看到,使用时可以直接#import导入。
如果仍要使用“Create NSManagedObject Subclass”生成文件的开发方式,可以找到Entity的“Codegen”选项(位于 Data Model inspector 中),将“Codegen”默认的“Class Definition”改为“Manual/None”,再使用“Create NSManagedObject Subclass”创建出来就没有问题了。

参考:知乎

回顾

CoreData整理(一)——基本概念与简单使用
CoreData整理(二)——多线程方案
CoreData整理(三)——MagicalRecord的使用
Demo地址

参考文章

coredata 数据迁移
定义 Core Data 迁移

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110798.html

相关文章

  • CoreData整理)——数据迁移其他问题

    摘要:整理四数据迁移和其他问题目录轻量级数据迁移后续遇到的问题轻量级数据迁移在做版本的迭代过程中,难免会遇到要修改文件,比如新增或删除一个实体增加或删除一个原有实体的属性等。 CoreData整理(四)——数据迁移和其他问题 目录 轻量级数据迁移 后续遇到的问题 轻量级数据迁移 在做app版本的迭代过程中,难免会遇到要修改.xcdatamodeld文件,比如新增或删除一个实体、增加或...

    snowell 评论0 收藏0
  • CoreData整理(三)——MagicalRecord的使用

    摘要:整理三的使用目录提供的使用方法进行操作提供的使用方法是对进行了一次封装,封装了多线程中复杂的操作,并提供了丰富的封装方法,使用起来代码清晰简洁。方法提供了两套多线程方法,其实这两种也挺类似的,都是使用了的父子关系。 CoreData整理(三)——MagicalRecord的使用 目录 MagicalRecord提供的使用方法 MagicalRecord进行CRUD操作 Magi...

    daydream 评论0 收藏0
  • CoreData整理(三)——MagicalRecord的使用

    摘要:整理三的使用目录提供的使用方法进行操作提供的使用方法是对进行了一次封装,封装了多线程中复杂的操作,并提供了丰富的封装方法,使用起来代码清晰简洁。方法提供了两套多线程方法,其实这两种也挺类似的,都是使用了的父子关系。 CoreData整理(三)——MagicalRecord的使用 目录 MagicalRecord提供的使用方法 MagicalRecord进行CRUD操作 Magi...

    cikenerd 评论0 收藏0
  • CoreData整理(二)——多线程方案

    摘要:如果多线程共用的话会出现数据混乱,甚至更严重的会导致程序崩溃。对于类型,之后过期,在实例化时并不会自动创建队列,需要自己管理多线程实现并发。方案二将使用三层的去实现多线程,。 CoreData整理(二)——多线程方案 目录 为何使用多线程 如何使用多线程 多线程方案 为何使用多线程     到了这里你一定会问,增删改查功能已经实现了,用的好好的为什么要使用多线程呢?其实想一想,...

    qc1iu 评论0 收藏0
  • CoreData整理(二)——多线程方案

    摘要:如果多线程共用的话会出现数据混乱,甚至更严重的会导致程序崩溃。对于类型,之后过期,在实例化时并不会自动创建队列,需要自己管理多线程实现并发。方案二将使用三层的去实现多线程,。 CoreData整理(二)——多线程方案 目录 为何使用多线程 如何使用多线程 多线程方案 为何使用多线程     到了这里你一定会问,增删改查功能已经实现了,用的好好的为什么要使用多线程呢?其实想一想,...

    inapt 评论0 收藏0

发表评论

0条评论

Nekron

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<