CoreData只是iOS数据持久化的其中一个方法,所有数据持久化如下

1、plist文件(属性列表),通常用于储存用户设置,也zhi可以用于存储捆绑的信息;

2、preference(偏好设置),常用于保存少量数据;

3、NSKeyedArchiver(归档),将内存中的对象实例保存成binary到磁盘并且可以逆向这个过程用来保存用户操作状态等;

4、SQLite 3,使用数据库进行存储;

5、CoreData,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

在新建项目时,把Use Core Data勾上

如果你创建时没勾,可以参考别人的博客,自己手动添加

由于我勾选了Use Core Data,系统帮我生成了后缀为【xcdatamodeld】的档案

单击进入后,先创建实体(添加实体),然后添加属性,最后为属性设置需要存储的类型(Type)

这里我为此实体(MyTest),添加唯一的属性testSaveInt,类型为Int(Integer 16)

我这里只添加唯一属性,这里额外推荐一篇很棒的博客,除了多属性,里面还有提到属性关联,这个属性被删了,会影响到别的东西

具体在他写的【四、逻辑与建模】,仔细看完他列举的情景,就明白我在说什么了,不过他是用objective-c写的,有点遗憾

接着创建一个NSManagedObject子类(点击Editor -> Create NSmanagedObject Subclass...)

然后先选择自己的项目(当初开始写app时,创建的项目名称)

最后再勾选刚刚创建的实体"MyTest"

创建完后,多出两个档案,分别是

MyTest+CoreDataClass.swift

MyTest+CoreDataProperties.swift(这个不用修改,它的作用是存放你刚刚添加的属性,例如前面的testSaveInt)

我们在【MyTest+CoreDataClass.swift】添加自己封装的方法,后续可以通过类的对象,来访问此类的一些函数

以下的代码,是对 Int 类型的变量 testSaveInt,做增删改查的动作,具体流程如下

1、使用【增】的方法,写入数据12

2、使用【】的方法,查询资料库是否有数据(for循环检验:有无用MyTest这个实体创建的资料库?)

3、使用【改】的方法,找出实体"MyTest"里,数据为12的Int,更改为38

4、使用【】的方法,查询数据是否被改变(假设第2步是成功的)

5、使用【删】的方法,资料库内,发现testSaveInt == 38 的,立刻删除

6、使用【】的方法,看看资料库内,是否都不存在数据了

import UIKit // 把这行加上
import Foundation
import CoreData @objc(MyTest)
public class MyTest: NSManagedObject { // 获取context
func getContext() -> NSManagedObjectContext {
let mDelegate = UIApplication.shared.delegate as! AppDelegate
return mDelegate.persistentContainer.viewContext
} // MARK: - 【增】的功能
func coreDataAdd(command: String) {
switch command {
case "测试写入":
let mDelegate = UIApplication.shared.delegate as! AppDelegate
let mContext = mDelegate.persistentContainer.viewContext let newTest = NSEntityDescription.insertNewObject(forEntityName: "MyTest", into: mContext)as! MyTest newTest.testSaveInt = 12 mDelegate.saveContext()
default:
break
}
} // MARK: - 【删】的功能
func coreDataDelete(command: String) {
switch command {
case "测试删除":
// 获取上下文
let mDelegate = UIApplication.shared.delegate as! AppDelegate
let mContext = mDelegate.persistentContainer.viewContext // 设置查询的实体,此处的实体是MyTest
let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext) // 请求实体(Fetch:取、拿来)
let request = NSFetchRequest<MyTest>()
request.entity = entity do {
let results:[AnyObject]? = try mContext.fetch(request) for myTest in results as![MyTest] {
if myTest.testSaveInt == 38 {
mContext.delete(myTest)
mDelegate.saveContext()
}
}
} catch {
print("删除数据失败")
}
default:
break
}
} // MARK: - 【改】的功能
func coreDataUpdate(command: String) {
switch command {
case "测试修改":
// 获取上下文
let mDelegate = UIApplication.shared.delegate as! AppDelegate
let mContext = mDelegate.persistentContainer.viewContext // 设置查询的实体,此处的实体是MyTest
let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext) // 请求实体(Fetch:取、拿来)
let request = NSFetchRequest<MyTest>()
request.entity = entity do {
let results:[AnyObject]? = try mContext.fetch(request) for myTest in results as![MyTest] {
if myTest.testSaveInt == 12 {
myTest.testSaveInt = 38
mDelegate.saveContext()
}
}
} catch {
print("修改数据失败")
} default:
break
}
} // MARK: - 【查】的功能
func coreDataSearch(command: String) {
switch command {
case "测试读取":
// 获取上下文
let mContext = getContext() // 设置查询的实体,此处的实体是MyTest
let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext) // 请求实体(Fetch:取、拿来)
let request = NSFetchRequest<MyTest>()
request.entity = entity do {
let results:[AnyObject]? = try mContext.fetch(request) for myTest in results as![MyTest] {
print("value=\(myTest.testSaveInt)")
}
} catch {
print("读取数据失败")
} default:
break
}
}
}

  

  

最终,在需要执行【数据持久化】的类,写上常量的申请(类的对象)

let classCoreData: MyTest = MyTest()

  

然后就可以用以下代码,愉快的调用了

classCoreData.coreDataAdd("测试写入")
classCoreData.coreDataDelete("测试删除")
classCoreData.coreDataUpdate("测试修改")
classCoreData.coreDataSearch("测试读取")

  

【Swift】CoreData的使用的更多相关文章

  1. Step by Step Do IOS Swift CoreData Simple Demo

    简单介绍 这篇文章记录了在 IOS 中使用 Swift 操作 CoreData 的一些基础性内容,因为缺乏文档,基本上都是自行实验的结果.错漏不可避免,还请谅解. 部分内容借鉴了 Tim Roadle ...

  2. iOS CoreData 增删改查详解

    最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然S ...

  3. Swift基础之CoreData的使用

    以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~ 步骤一:创建一个Swift ...

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

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

  5. SWIFT 之CoreData初试

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

  6. [Swift通天遁地]七、数据与安全-(4)CoreData数据的增、删、改、查

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. iOS开发——数据持久化Swift篇&(四)CoreData

    CoreData import CoreData class ViewController: UIViewController { override func viewDidLoad() { supe ...

  8. Swift下CoreData的使用

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

  9. 【swift】CoreData Crash(崩溃)(Failed to call designated initializer on NSManagedObject class)

    感谢另一篇博客:https://blog.csdn.net/devday/article/details/6577985 里面的图片和介绍,发现问题如他描述的一样,没有bundle 我的Xcode版本 ...

随机推荐

  1. [命令行]Mysql 导入 excel 文件

    将 excel 表格中的数据批量导入数据库中 将要导入的表删除字段名,只留下要导入的数据. 将文件另存为 *.csv格式,可以用记事本打开(实际上就是标准的逗号分隔的数据 进入mysql,输入命令,打 ...

  2. 关于Arrays类的静态方法asList()

    Array.asList():是数组转成集合的方法 List<String> list = Arrays.asList(new String[]{"AA", " ...

  3. gitbook的安装

    [前端工具]nodejs+npm+vue 安装 安装 npm install gitbook-cli -g gitbook命令: gitbook init //初始化目录文件 gitbook help ...

  4. github上传和删除文件(三)

    上传文件: git init git add * git commit -m "description" //git remote rm origin 或查看当前 git remo ...

  5. .Net Core微服务——网关(2):ocelot集成consul

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略, ...

  6. 一维前缀和 连续数组和为k

    给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数. 滑动窗口没办法解决有负数的情况 方法一: 预处理 前缀和 sum_ij = preSum[j] - preSum[i-1 ...

  7. 微信小程序(八)

    应用弹性盒子布局 基于 flexbox layout 的实现 先变为 flexbox layout display: flex; 从上往下 flex-direction: column; 均匀分布,居 ...

  8. Salesforce Consumer Goods Cloud 浅谈篇三之 行动计划(Action Plan)相关配置

    本篇参考: https://v.qq.com/x/page/f0772toebhd.html https://v.qq.com/x/page/e0772tsmtek.html https://v.qq ...

  9. [年薪60W分水岭]基于Netty手写Apache Dubbo(带注册中心和注解)

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  10. 【Tool】IDEA功能--SVN和Git

    IDEA功能--SVN和Git 2019-11-08  21:12:22  by冲冲 1.IDEA的SVN (1)提交项目代码到SVN服务器 ① 指定不用上传的目录 ② 设置项目上传的路径 SVN服务 ...