IOS SWIFT开发–为什么修改模型实体字段类型后无法同步到icloud云端?

今天修改了模型实体的某个字段的类型,其他都没改变,重新编译代码,在app上新增数据,然后删除app,重新编译安装app,发现数据丢失了。也就是说之前新增的数据只保存在coredata本地,并没有同步到云端。再次新增测试数据,然后查看另外一台iphone手机的app,也无法看到同步的新增数据,也就是没有同步到icloud云端,同步出现问题!

因为业务需求修改了数据模型实体其中一个关于颜色的字段的存储类型,在实体属性中把原来的transformable改为了string,实体名字还是保持原来的名字, 重新编译代码,看到生成新的属性文件,数据类型也是string,似乎一切很正常,但是运行app发现数据没有同步,因为之前修改了大量代码,一开始以为是改代码导致的,但实际上并没有改过同步相关的代码,后面查找超1个小时没有找到原因,最后在控制台无意中看到了那个字段的类型是bytes,恍然大悟,这个应该是string才对,是不是因为这里的类型不匹配导致同步出现问题,要不试试看删除它,是不是有效果。于是删掉了该记录类型,重新编译,发现后台重新生成了新的记录类型 ,问题随即解决

以下是具体的解决方法图示。

​​​​​​​控制台修改步骤

1.找到cloudkit服务

2.进入cloudkit database

3.点击record types ,删除原来的实体的记录即可。

4.修改前在控制台显示该字段是bytes

5.删除,重新编译后,刷新控制台,发现变为了string,(如果没有显示,则手工新增记录类型)。启动另外一台手机的app,发现数据已经实时同步了,同步bug解决了。

总结:

1.修改了实体字段类型后,苹果似乎没有同步后台的类型,可能还是需要手工修改。

2.后面大家遇到类似同步异常的问题,可以看看是不是后台这个记录类型和最新代码修改的不一致导致的问题。

IOS SWIFT开发–为什么修改模型实体字段类型后无法同步到icloud云端?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top