CoreData的冰山一角

最近需要将项目的数据存储模式改为CoreData,所以来总结一下遇到的问题以及解决方法

在使用CoreData前,先在Libraries里导入CoreData.framework

首先是创建模型

Q1:创建Entitles时,如果想要数组或者字典的属性怎么办

  • S1:网上已经有答案,选择Transformable即可,将请求的NSData数据直接放入数据库中,不需要取解Json,在取数据的时候,解析数据即可

  • S2:或者再创建一个实体,进行关联(Relationships),这个方法会比较麻烦,具体看自己的对象关联方式怎么设计,而且需要更多的CoreData知识。比如进行关联的时候,要关注下面这两属性是什么意思,网上也已经有答案了:

##删除关系
NoAction(无操作):当A被删除时,B对象不变,但会指向一个不存在的对象,一般不建议使用;
Nullify(作废):当A对象被删除时,B对象指向的A对象会置为空,如果A与B的关系式一对多,则是A对象从B容器中移除
Cascade(级联):当A对象被删除时,A对象指向的B对象也会被删除;
Deny(拒绝):当删除指向对象B存在的A对象时,操作将会被拒绝;
##对象对应关系
ToMany: 表示一个A对象可以包含多个B对象;
ToOne: 表示一个A对象只能对应一个B对象;
关系设置区域

Q2:xcode8以上通过模型create NSManagedObject subclass时默认创建为swift文件,可能会导致项目各种报错

  • S2:先选择模型文件并选择然后找到Language进行修改


    选择模型文件

    找到Language进行修改

Q3:通过模型create NSManagedObject subclass创建实体文件时,默认可能将文件创建到项目最外层目录下

  • S3:貌似是Xcode的一个bug,一定要用Group的那个选项来选择路径,才能在正确地路径下创建
路径选择区域

Q4:创建CoreDataManager后,报错:Receiver ‘xxx’ for class message is a forward declaration或者Receiver type ‘xxx’ for instance message is a forward declaration

不明所以的报错,求解
  • S4: 网上查到的貌似是ARC和MRC的原因,但是我是导入#import <CoreData/CoreData.h>就可以了,如果有其他的解决方法,请分享给我

Q5:想要查看CoreData存储的具体log

  • S5:看下图
Edit Scheme
找到Run-Arguments,然后下面加入两个字段

Q6:创建一个实体,但是在CoreData创建的数据库中动态创建多张表

  • S6:看到很多大神都是说一个实体一张表,但是我想要实现移动端不同用户建一张表,不同的用户标识不同的表名,同一台手机,当登录A用户的时候读取的是A表,A退出B登录,就读取B表,但是这个貌似是没有很好解决办法的;所以我就只能在在实体再加一个用户标识的字段,每次读取时用NSPredicate来筛选(暂时就这样吧,也许还有很多我不懂的地方,欢迎交流)

----------------------------------------------------------------------------------2017.03.17

Q7:最近又发现一个问题:怎么我用的CoreData老是崩溃,错误信息:[[__NSCFSet addObject:]: attempt to insert nil'],老是断在在save这个方法,我还特意加个判断实体是否为空再来save,可是貌似没什么用;找了一下看到stackoverflow里面还挺多这种情况的,所以我参考了下面这位的方法

大神的对话
  • S7:注意创建时用NSPrivateQueueConcurrencyType,大家都试试吧


    创建NSManagedObjectContext

----------------------------------------------------------------------------------2017.04.13

Q8:一不小心又发现一个崩溃问题:returned error Error Domain=NSCocoaErrorDomain Code=134140 "永久性储存转移失败,缺少映射模型。" ,看到有人说是在存储的时候数据类型不一致导致的,我已经查到这个小bug并修复了但是还是报错;reason = "Can't find mapping model for migration"用这个reason去stackoverflow里面也能看到好几个这样的问题但是都是好几年前的,所以我继续找了一下,还是能找到答案的

原来使用的options
后来使用的options
  • S7:options新加了一个键值对:NSInferMappingModelAutomaticallyOption:@YES
    NSMigratePersistentStoresAutomaticallyOption:这个操作表示自动迁移Persistent Store
    NSInferMappingModelAutomaticallyOption这个操作是表示自动创建Mapping Model。
    如果只是使用了NSMigratePersistentStoresAutomaticallyOption:@YES却没有带上NSInferMappingModelAutomaticallyOption:@YES就可能导致像我上面提到的出错。原因可能就是当数据的物理信息发生变化时,PersistentStores会自动创建,但是缺失了MappingModel。MappingModel是为PersistentStores服务的,所以最好一起带上比较安全。
    ----------------------------------------------------------------------------------2017.05.25
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,800评论 6 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 1 前言 CoreData不仅仅是数据库,而是苹果封装的一个更高级的数据持久化框架,SQLite只是其提供的一种数...
    RichardJieChen阅读 2,955评论 2 2
  • 这几天面试了几位90年左右的女生,年龄说大不大,说小不小,基本都工作了5年以上,却始终处于迷茫的状态,特别是文科生...
    千万里寻小小雨阅读 921评论 0 7
  • KVO:(Key-Value-Observer)键值观察者,是观察者设计模式的一种具体实现。 在我们编程中,很多时...
    邦奇诺阅读 255评论 0 2