博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift3.0:CoreData的使用
阅读量:6760 次
发布时间:2019-06-26

本文共 5774 字,大约阅读时间需要 19 分钟。

一、介绍

CoreData不像slqite3那样编写代码繁琐,同时避免了使用了SQL语句的麻烦,也可以回避使用C语言的语法,降低了iOS开发的技术门槛。

CoreData可降低开发成本,提高代码质量。它是一个完全面向对象的API,能够合理管理内存,负责在数据库中存储数据,底层也是由类似

于SQL的技术实现的。CoreData是持久化存储的最佳方式,数据最终的存储类型可以是SQLite数据库、XML、二进制、内存或自定义数据类型

它和SQLite的区别是:只能取出整个实体记录,然后分离,之后才能得到实体的某个属性。

 

二、注意

Swift3.0中CoreData使用有了很大的变动,如下:

1、生成的AppDelegate类中关于CoreData的代码更少了

2、创建Entity实体后,再创建对应的类,找不到NSManageredObject这个文件,解决办法如下操作

(1)创建实体,添加属性

(2)创建对相应的类,只有Data Model和Mapping Model,却找不到NSManageedObject

(3)从工具栏Editor创建NSManagedObject

 

3、创建出的对应得实体类是分类

 

 

三、好了,创建完毕后,现在开始进行CoreData的操作了,这里我创建了工具类HandleCoreData,专门用来操作CoreData的,提供类方法。

(1)插入数据

//1、插入数据的具体操作如下    /*     * 通过AppDelegate单利来获取管理的数据上下文对象,操作实际内容     * 通过NSEntityDescription.insertNewObjectForEntityForName方法创建实体对象     * 给实体对象赋值     * 通过saveContext()保存实体对象     */    class func insertData(){                //获取数据上下文对象        let app = UIApplication.shared.delegate as! AppDelegate        let context = app.persistentContainer.viewContext                //创建user对象        let EntityName = "User"        let oneUser = NSEntityDescription.insertNewObject(forEntityName: EntityName, into:context) as! User                //对象赋值        oneUser.userID = 2        oneUser.userEmail = "12345@163.com"        oneUser.userPwd = "123456"                //保存        app.saveContext()    }

(2)查询数据

//2、查询数据的具体操作如下    /*     * 利用NSFetchRequest方法来声明数据的请求,相当于查询语句     * 利用NSEntityDescription.entityForName方法声明一个实体结构,相当于表格结构     * 利用NSPredicate创建一个查询条件,并设置请求的查询条件     * 通过context.fetch执行查询操作     * 使用查询出来的数据     */    class func queryData(){                //获取数据上下文对象        let app = UIApplication.shared.delegate as! AppDelegate        let context = app.persistentContainer.viewContext                //声明数据的请求        let fetchRequest:NSFetchRequest
= NSFetchRequest() fetchRequest.fetchLimit = 10 //限制查询结果的数量 fetchRequest.fetchOffset = 0 //查询的偏移量 //声明一个实体结构 let EntityName = "User" let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context) fetchRequest.entity = entity //设置查询条件 let predicate = NSPredicate.init(format: "userID = '2'", "") fetchRequest.predicate = predicate //查询操作 do{ let fetchedObjects = try context.fetch(fetchRequest) as! [User] //遍历查询的结果 for info:User in fetchedObjects{ print("userID = \(info.userID)") print("userEmail = \(info.userEmail)") print("userPwd = \(info.userPwd)") print("+++++++++++++++++++++++++") } }catch { let nserror = error as NSError fatalError("查询错误: \(nserror), \(nserror.userInfo)") } }

(3)修改数据

//3、修改数据的具体操作如下    /*     * 利用NSFetchRequest方法来声明数据的请求,相当于查询语句     * 利用NSEntityDescription.entityForName方法声明一个实体结构,相当于表格结构     * 利用NSPredicate创建一个查询条件,并设置请求的查询条件     * 通过context.fetch执行查询操作     * 将查询出来的数据进行修改,也即进行赋新值     * 通过saveContext()保存修改后的实体对象     */    class func updateData(){                //获取数据上下文对象        let app = UIApplication.shared.delegate as! AppDelegate        let context = app.persistentContainer.viewContext                //声明数据的请求        let fetchRequest:NSFetchRequest
= NSFetchRequest() fetchRequest.fetchLimit = 10 //限制查询结果的数量 fetchRequest.fetchOffset = 0 //查询的偏移量 //声明一个实体结构 let EntityName = "User" let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context) fetchRequest.entity = entity //设置查询条件 let predicate = NSPredicate.init(format: "userID = '2'", "") fetchRequest.predicate = predicate //查询操作 do{ let fetchedObjects = try context.fetch(fetchRequest) as! [User] //遍历查询的结果 for info:User in fetchedObjects{ //修改邮箱 info.userEmail = "xyq@163.com" //重新保存 app.saveContext() } }catch { let nserror = error as NSError fatalError("查询错误: \(nserror), \(nserror.userInfo)") } }

(4)删除数据

//4、删除数据的具体操作如下    /*     * 利用NSFetchRequest方法来声明数据的请求,相当于查询语句     * 利用NSEntityDescription.entityForName方法声明一个实体结构,相当于表格结构     * 利用NSPredicate创建一个查询条件,并设置请求的查询条件     * 通过context.fetch执行查询操作     * 通过context.delete删除查询出来的某一个对象     * 通过saveContext()保存修改后的实体对象     */    class func deleteData(){                //获取数据上下文对象        let app = UIApplication.shared.delegate as! AppDelegate        let context = app.persistentContainer.viewContext                //声明数据的请求        let fetchRequest:NSFetchRequest
= NSFetchRequest() fetchRequest.fetchLimit = 10 //限制查询结果的数量 fetchRequest.fetchOffset = 0 //查询的偏移量 //声明一个实体结构 let EntityName = "User" let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context) fetchRequest.entity = entity //设置查询条件 let predicate = NSPredicate.init(format: "userID = '2'", "") fetchRequest.predicate = predicate //查询操作 do{ let fetchedObjects = try context.fetch(fetchRequest) as! [User] //遍历查询的结果 for info:User in fetchedObjects{ //删除对象 context.delete(info) //重新保存 app.saveContext() } }catch { let nserror = error as NSError fatalError("查询错误: \(nserror), \(nserror.userInfo)") } }

 

操作CoreData完整的代码如下:

 
View Code

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6441426.html
,如需转载请自行联系原作者
你可能感兴趣的文章
货币宽松的终极猜想:终结
查看>>
Linux 下多核CPU知识
查看>>
数学之美笔记(三)
查看>>
用友U8登录控件的使用
查看>>
ansible自动化部署zabbix客户端
查看>>
我的友情链接
查看>>
MyCat部署运行(Linux环境)与使用步骤详解
查看>>
超好用的c#IDE SharpDevelop 5.0
查看>>
Linux下搭建日志服务器
查看>>
windows下的开发相关工具集合
查看>>
命令详解:e2fsck
查看>>
将重复数据内容信息累加
查看>>
Zookeeper 绑定指定IP
查看>>
PCB板的跨分割设计
查看>>
我的友情链接
查看>>
Vue快速入门-1-Vue的简单使用
查看>>
回文的判断 (数字、字符串)
查看>>
ActiveX控件在注册表中注册信息整理
查看>>
我的友情链接
查看>>
WEB SSH Ajaxterm客户端
查看>>