在使用coredata 的时候,需要永久性保存数据, 使用 NSManagedObjectContext 的 sava: 方法来实现。
在这个过程中发现各种不能保存,于是乎花了两天的时候来解决它,搜寻各种办法,不过找到的办法无数却始终解决不了我的问题,最后发现了我的问题所在,却让我哭笑不得。
总结在保存的时候遇到问题的解决办法:
1、使用了多个线程操作同一个 NSManagedObjectContext对象
最好是每个线程用一个 NSManagedObjectContext对象
2、NSManagedStoreCoordinator 有缓存数据,需要重新填充
[managedObjectContext setStalenessInterval:0.0]; //强制性从磁盘装载
3、NSManagedObjectContext 合并政策失败的核心数据是无法完成合并
[managedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];//设置上下文对象合并
4、数据库的路径问题
检查数据库路径是否正确
5、更新了数据库结构
需要从模拟器或真机上删除项目,并clean 重新编译
6、存储的类型和数据库中定义的类型不匹配问题
最后说说我的问题: 使用coredata 在项目中建立表,它会自己来生成数据库,而在每个表中都有它自己生成的Z_PK,Z_ENT,Z_OPT 这三个字段,
Z_ENT 表在xcdatamodel 中的索引值,如果有6个表那么它的值的区间就是[1,6 ]
Z_OPT 表示的是每条数据被操作的次数,初始化值为1,只要是增删改查都会加1
而我在为了测试我的程序,自己去找到了数据库填写了数据,以至于 z_ent 和 z_opt这两个值未填写,导致了我保存数据时的各种不通过,
而用代码插入的数据 是会自动为这两个字段赋值的,这让我郁闷了很久,这次算是长记性了,在没有弄清这玩意的时候就算是测试数据也最好去用代码生成,不仅检测了代码也不会出现这种错误。。