CoreData 简要总结(三)

Entity属性的各种设置选项

Transient

如果在Properties中勾选了这一项,那么该属性就不会写入持久化存储区了。“不写入持久化存储区”听上去有些奇怪,但是有时,只需要吧特性留在托管对象上下文里面就行了。比方说,你需要计算某个临时的值,而这种值就可以放在transient特性中。

Optional

Optional特性并不一定要有值。所有的特性在刚建出来的时候都是Optional特性。如果某一个不是Optional特性,那么在把这非Optional特性放回存储区的时候,它必须具备有效的值才行。

Indexed

系统会优化Indexed特性以提升搜索效率,但代价是要在底层的持久化存储区占用额外的空间。这些额外的空间的大小要根据待索引的数据量来定。如果不打算搜索某个属性,那么就不要勾选Indexed,这样可以节省一些空间。

Validation

你可以使用Validation中的各个选项来阻止不合理的数据进入持久化存储区。每一种数值型的属性都支持相同的Validation选项,也就是可以规定其最小值和最大值。同理,对于字符串类型或者日期类型的属性来说,可以限定其字符串长度和日期范围。

Default Value

除了可变数据类型与二进制数据之外,其余类型的属性都可以具备默认值。

Reg. Ex.

Reg. Ex.Regular Expression(正则表达式)的缩写,他不仅能够限定字符串的最小长度以及最大长度,而且还能实现很多验证功能。一般来说,我们会用正则表达式来判断属性中的字符串值是不是能与某个特定的模式相匹配。匹配成功了才能将其写入持久化存储区。

Store in External Record File

开启了这个选项之后,类型为二进制数据的属性就可以把大量数据保存在持久化存储区之外了。但如果底层的持久化存储区是XML格式(iOS不支持这种格式的存储区),那么该选项就不起作用了。

后端SQL的可见性

按照下列步骤开启SQL Debug模式
1、点击Product>Scheme>Edit Scheme ...
2、点击Run,并切换到Arguments分页。
3、点击Arguments Passed On Launch区域中的“+”按钮,以新增参数。
4、输入新参数 -com.apple.CoreData.SQLDebug 3,然后点击OK。

现在我们已经开启了第三级的SQL Debug模式,然后重新运行程序,查看控制台输出了什么。

设置并获取请求模版

如果我们每一次获取托管对象时都要使用手工编写谓词格式确实很累人哇。幸好的是,Xcode的Data Model Designer有预定义获取请求的功能。这些可复用的模版比谓词更容易配置,而且还能减少重复代码。

创建获取请求模版:

  • 选中.xcdatamodeld。
  • 点击Editot > Add Fetch Rquest。
  • 然后设置请求模版的名称。
  • 点击+按钮来配置获取请求模版。
设置请求模版

要想使用获取请求模版,需要先给托管对象模型发送消息,告诉他将要使用的模版叫做什么名字。发送完消息之后,就可以在返回的NSFetchRequest上面操作了。由于这种获取请求是根据模版创建出来的,所以我们无需通过向其发送谓词来执行筛选操作。

代码举例: 找到Fetch Rquest 模板中的request并使用。
- (void)searchStudentFromFetchRequestTemplate{
    NSManagedObjectModel *mom = [CoreDataHelper getManagedObjectModel];
    NSFetchRequest *req1 = [mom fetchRequestTemplateForName:@"Name"];
    NSError *error = nil;
    NSArray *students = [self.context executeFetchRequest:req1 error:&error];
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }else{
        Student *stu = [students lastObject];
        self.hintLabel.text = [NSString stringWithFormat:@"找到了最后一个学生,名字是%@,id是%zd",stu.name,stu.idNum];
    }
}

托管对象模型之间的关系

关系是用来链接实体的。在托管对象模型中使用关系。

我们把界面的Editor Style 改为 Graph,按下control键,用鼠标从一个实体托向另一个实体。当编辑器界面处于Graph风格时,在两实体之间创建的关系是双向关系。

双向关系

如果在Table风格的编辑器界面中创建关系,那么创建出来的可能就是单向关系,此时如果需要建立双向关系,那么还必须手动添加反向的那一条关系。

把两个实体关联起来之后,我们就可以通过关系来访问相关实体的属性了。

接下来的问题就是,要想清楚每个方向上的关系是一对多,还是一对一。想清楚这个问题之后,你应该就能给关系起一个更为合适的名字。一对多的关系,不限制目标对象的数量,而一对一的关系则会把目标对象的数量限定为一个。

实体的继承

与类一样,实体也可以继承自父实体。这个功能有助于简化数据模型。子实体会自动继承父实体的各种属性。<u>在底层的SQLite存储区里,父-子体系中的实体都会存储到同一张数据表里</u>。

<u>如果不想令父实体实例化,那么可以将其标注为抽象的。</u>只有能够确定父实体在代码中毫无意义时,才应该启用这个选项。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 该文章属于刘小壮原创,转载请注明:刘小壮[//www.greatytc.com/u/2de707c93d...
    刘小壮阅读 27,019评论 75 85
  • 数据持久化的相关知识 四种将数据持久化存储到iOS文件系统的机制: plist 对象归档 iOS的嵌入式关系数据库...
    melouverrr阅读 624评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,944评论 6 13
  • 新一季的《奇葩说》第一集辩论的主题是“‘你’会不会做单身妈妈”。 这就像是在问大家,你觉得单身家庭就等于畸形么? ...
    悬浮岛上无人生还阅读 195评论 0 0