我之前的随笔中有写过一些iOS持久化存储的方法,包含了sqlite、解归档、沙盒存放等等。这些方式中,能够大规模存储,并保持性能的只有使用sqlite了。而这里将记录下Cocoa自身继承的数据库的存储方案--CoreData的使用。

CoreData在底层也是直接采用了sqlite等作为数据库的搭建。只是在上层封装成Cocoa熟悉的方式,这样,即使对于不熟悉其他的数据的开发者来说,也不会感到无从下手。 同时CoreData中加入了可视化地操作数据的关联操作,为我们在Cocoa中使用CoreData提供更方便的途径。


一、搭建CoreData环境。

搭建CoreData的环境有两种方式。第一种在项目中搭建,这种方式比较繁琐,需要开发者指定存储地址、方式等。除非是在已经开发的项目中添加CoreData,不然不推荐。 第二种方式是在项目创建的时候,勾选User Core Data功能,项目创建之后,会自动创建CoreData的相关代码。搭建成功之后,在Appdelegate文件中会看到一静创建后的代码。接下来在项目中,就可以使用CoreData了。

二、可视化建立项目中的实体

在项目中找到  项目名.xcdatamodeld 文件。这是可视化操作CoreData的窗口。(这个文件只有在添加了CoreData的时候才有,否则需要手动创建。)

在使用开始,这个文件是空的,我们需要添加实体,点击图中的窗口底部的 add entiy ,成功之后在左侧一栏看到已经添加的实体。

修改名字,这里注意,实体的名字必须是大些字母开头。

在右侧栏中我们看到每个实体有三个小标题: 分别是 属性(attribute)、关联(relationship)、Fetched propertries(查询对象)。

attribute

attribute类似于我们创建一个类的属性,其实就是NSMangerModel中的属性。 对一个NSMangerModel类中,所有需要存储的属性都可以放在这里。 添加方式是:点击下方的“+”就可以添加了。 attribute 能选择的类型包括以下:

  • Undefined: 默认值,参与编译会报错
  • Integer 16: 整数,表示范围 -32768 ~ 32767
  • Integer 32: 整数,表示范围 -2147483648 ~ 2147483647
  • Integer 64: 整数,表示范围 –9223372036854775808 ~ 9223372036854775807
  • Float: 小数,通过MAXFLOAT宏定义来看,最大值用科学计数法表示是 0x1.fffffep+127f
  • Double: 小数,小数位比Float更精确,表示范围更大
  • String: 字符串,用NSString表示
  • Boolean: 布尔值,用NSNumber表示
  • Date: 时间,用NSDate表示
  • Binary Data: 二进制,用NSData表示
  • Transformable: OC对象,用id表示。可以在创建托管对象类文件后,手动改为对应的OC类名。使用的前提是,这个OC对象必须遵守并实现NSCoding协议

relationship

relationship中描述的是实体与实体之间的关系。有 多对多、多对一、一对多、一对一四种情况可选。

Fetched propertries

Fetched Properties用于定义查询操作,和NSFetchRequest功能相同。定义fetchedProperty对象后,可以通过NSManagedObjectModel类的fetchRequestFromTemplateWithName:substitutionVariables:方法或其他相关方法获取这个fetchedProperty对象。 个人觉得这个属性类似saqlite中的 autoindex。可以作为实体标签,便于查找。

三、建立实体之间的关联

建立一个实体之后,其实就已经用来保存实体的实例化对象了。但是有不少情况我们的实体并没有很单纯,可能我们需要在实体中保存的不仅仅是属性,而是一个个实体。这时候就需要将这一个个实体和主实体关联起来。 在窗口底部有一排功能按钮,最右侧的按钮可以选择实体的展示方式。

我们将之切换到group样式。

按住Ctrl键拖动实体,可以将两个实体关联起来。

关联之后,将实体展示切换会 list 模式,在relationship中看到两个实体之间的关联,设置相对应地名字。同时在右侧栏中看到一些设置。调整关联中的一些属性,比如删除规则,关联类型,等等。

创建好实体和关联关系之后,我们就该创建这些实体的类了。选中 项目名.xcdatamodeld 文件,菜单中选择 EIdtor -> CreartNSmangerObject ,选择保存的位置即可

最后看到创建好的实体文件。我们将这些看着跟一般的类一样即可。 只不过,它包含了存储到CoreData 的API。

四、 如何保存Coredata不支持的属性

上面讲到了attribute只能选择部分类型。

如果是不支持的类型可以将之设置成 Transformable,然后在项目中创建Transformable的子类,实现Transformable类型对要转化的类型的转换。这种方式稍稍有点繁琐。

在这里提供一个小技巧。

在Entity+CoreDataClass文件中,我们可以自定义一些属性。 通过设置其get和set方法,实现存储和转化。具体操作如下:

假如我们需要保存一张图片大CoreData,显然直接保存是不可能的,我们可以在实体放置一个image属性,将其类型设置为 NSData。

再在创建的实体的文件处理如下:

五、  建议使用第三方的框架使用CoreData。

尽管苹果公司对coreData做了很大的优化,但是使用起来还是略显麻烦,同学们可以找一些比较好的第三方框架。比如我目前正在使用的MagicalRecord 就很不错哦。

Swift下CoreData的使用的更多相关文章

  1. Masonry 在swift下的使用

    Masonry在oc下使用很方便,但是在swift下,由于oc方法和property都可以使用.fuc的语法,swift下只有属性可以使用.property的语法,方法只能写成.func().因此在s ...

  2. iOS 11 导航栏 item 偏移问题 和 Swift 下 UIButton 设置 title、image 显示问题

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. Swift下自定义xib添加到Storyboard

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51657154 ...

  4. swift -- 如何在swift下,使用类似oc的pch文件功能

    以前在做oc下的项目的时候,pch文件是必创建的,因为实在是太方便了,只要在build setting里面把pch的路径换成绝对路径,那么剩下的,想干什么就在里面干什么,但是swift下,可以实现这种 ...

  5. [Swift]创建CoreData的两种方式

    一.CoreData介绍 CoreData主要分为两部分: 上层是模型层,模型层有NSManagedObjectContext上下文管理着, 底层则是由SQLite实现的持久化部分,通过NSPersi ...

  6. SWIFT 之CoreData初试

    SWIFT中使用CoreData来保存本地数据,在建立项目的时候把 "Use Core Data"选项选上 项目建立完成后点击后缀为 .xcdatamodeld的那个文件,点击右下 ...

  7. Objective-C与Swift下的自定义打印函数(Debug和Release)

    1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: NSLog(@"%s&quo ...

  8. Swift下多个Storyboard的项目结构

    我是个比较喜欢用storyboard和xib的人.我个人的习惯就是,能用storyboard的一定不用代码手工撸.当然自己业余个人写的项目,基本上一个storyboard就搞定了.但涉及到多人合作下时 ...

  9. ios开发之--swift下Alamofire的使用

    1,首先使用cocoapods导入,如果有不会的同学,可以去看我写的关于cocopods使用的那篇博客 2,直接上代码: a 先看下文件结构 CommonFile.swift import UIKit ...

随机推荐

  1. 多线程在python中的使用 thread

    近期想学习研究一下python中使用多线程,来提高python在爬虫项目中的效率. 如今我们在网页上查询到在python中使用的多线程的使用大多数都是使用的threading模块,可是python中另 ...

  2. [寒江孤叶丶的Cocos2d-x之旅_36]用LUA实现UTF8的字符串基本操作 UTF8字符串长度,UTF8字符串剪裁等

    原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net/qq446569365 一个用于UTF8字符串操作的类.功能比較 ...

  3. Session丢失原因与解决方案

    win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,   造成保存在该进程中的session丢失. 因为Session,Appl ...

  4. Javascript和jquery事件--点击事件和触发超链接

    前面的不过是一些基础的知识,真正的一些事件还是有点不同.还有一些命名空间的问题.不过现在ie也开始接受W3C标准,而且平时开发也很少考虑ie了,一些事件就不考虑ie了. 点击事件--click 大部分 ...

  5. 判断Bigdecimal类型是否等于0的方法

    1.我之前用来判断Bigdecimal类型是否等于0的方法 b.equals(BigDecimal.ZERO); 用equals方法和BigDecimal.ZERO进行比较. 2.上面方法存在的问题 ...

  6. vue指令概览

    原文 简书原文:https://www.jianshu.com/p/5fd47b7422fd 大纲 1.什么是vue指令 2.向指令中传入参数 3.指令中带入修饰符 4.指令的缩写 5.常见的vue指 ...

  7. Android学习笔记之GridView的使用具体解释

    (1)创建布局代码例如以下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  8. js 第四章 cookie的操作

    js 第四章 cookie的操作 一.学习要点 掌握cookie的简单应用 二. js 第四章 cookie的操作 了解cookie 什么是cookie? cookie 是存储于访问者的计算机中的变量 ...

  9. 使用vue-cil搭建项目

    原文: 简书原文:https://www.jianshu.com/p/1af9b72cf86e 大纲 1.安装NodeJs 2.安装vue-cli 3.创建项目 4.启动项目 5.打包项目 6.项目实 ...

  10. [Jade] Use Mixins in Pug

    Mixin works as a function. extends layout include mixins/storeForm block content .inner h2 #{title} ...