Swift CoreData 增删改查

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1e9421; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c42275; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; background-color: #ffffff }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; background-color: #ffffff; min-height: 21.0px }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3e1e81; background-color: #ffffff }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #294c50; background-color: #ffffff }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3c828b; background-color: #ffffff }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #6122ae; background-color: #ffffff }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { color: #c42275 }
span.s3 { color: #6122ae }
span.s4 { color: #294c50 }
span.s5 { color: #703daa }
span.s6 { color: #3c828b }
span.s7 { color: #539aa4 }
span.s8 { color: #0435ff }
span.s9 { color: #c81b13 }
span.s10 { color: #3e1e81 }
span.s11 { color: #1e9421 }

import UIKit

import CoreData

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

}

}

//MARK: - CoreData

extension ViewController{

//MARK:    获取上下文对象

func getContext() -> NSManagedObjectContext{

let appDelegate = UIApplication.shared.delegate as! AppDelegate

return appDelegate.persistentContainer.viewContext

}

//MARK:    插入班级信息

func insertClasses(){

for i in 1...100{

let classNO = Int64(i)

let name = "rg"+"\(i)"

insertClass(classno:classNO,name:name)

}

}

func insertClass(classno:Int64,name:String) {

//获取上下文对象

let context = getContext()

//        //创建一个实例并赋值

//                let classEntity = NSEntityDescription.insertNewObject(forEntityName: "Class", into: context) as! Class

//

//        //Class对象赋值

//        classEntity.classNo = classno

//        classEntity.name = name

//通过指定实体名 得到对象实例

let Entity = NSEntityDescription.entity(forEntityName: "Class", in: context)

let classEntity = NSManagedObject(entity: Entity!, insertInto: context)

classEntity.setValue(classno, forKey: "classNo")

classEntity.setValue(name, forKey: "name")

do {

//保存实体对象

try context.save()

} catch  {

let nserror = error as NSError

fatalError("错误:\(nserror),\(nserror.userInfo)")

}

}

//MARK:    查询班级信息

func getClass(){

//        异步fetch

//获取数据上下文对象

let context = getContext()

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Class")

// 异步请求由两部分组成:普通的request和completion handler

// 返回结果在finalResult中

let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { (result : NSAsynchronousFetchResult!) in

//对返回的数据做处理。

let fetchObject = result.finalResult as! [Class]

for  c in fetchObject{

print("\(c.classNo),\(c.name ?? "")")

}

}

// 执行异步请求调用execute

do {

try context.execute(asyncFetchRequest)

} catch  {

print("error")

}

}

//MARK:    修改班级信息

func modifyClass() {

//获取委托

let app = UIApplication.shared.delegate as! AppDelegate

//获取数据上下文对象

let context = getContext()

//声明数据的请求,声明一个实体结构

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Class")

//查询条件

fetchRequest.predicate = NSPredicate(format: "classNo = 2", "")

// 异步请求由两部分组成:普通的request和completion handler

// 返回结果在finalResult中

let asyncFecthRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { (result: NSAsynchronousFetchResult!) in

//对返回的数据做处理。

let fetchObject  = result.finalResult! as! [Class]

for c in fetchObject{

c.name = "qazwertdfxcvg"

app.saveContext()

}

}

// 执行异步请求调用execute

do {

try context.execute(asyncFecthRequest)

} catch  {

print("error")

}

}

//MARK:    删除班级信息

func deleteClass() -> Void {

//获取委托

let app = UIApplication.shared.delegate as! AppDelegate

//获取数据上下文对象

let context = getContext()

//声明数据的请求,声明一个实体结构

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Class")

// 异步请求由两部分组成:普通的request和completion handler

// 返回结果在finalResult中

let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { (result:NSAsynchronousFetchResult) in

//对返回的数据做处理。

let fetchObject = result.finalResult! as! [Class]

for c in fetchObject{

//所有删除信息

context.delete(c)

}

app.saveContext()

}

// 执行异步请求调用execute

do {

try context.execute(asyncFetchRequest)

} catch  {

print("error")

}

}

//MARK:    统计信息

func countClass() {

//获取数据上下文对象

let context = getContext()

//声明数据的请求,声明一个实体结构

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Class")

//请求的描述,按classNo 从小到大排序

fetchRequest.sortDescriptors = [NSSortDescriptor(key: "classNo", ascending: true)]

//请求的结果类型

//        NSManagedObjectResultType:返回一个managed object(默认值)

//        NSCountResultType:返回满足fetch request的object数量

//        NSDictionaryResultType:返回字典结果类型

//        NSManagedObjectIDResultType:返回唯一的标示符而不是managed object

fetchRequest.resultType = .dictionaryResultType

// 创建NSExpressionDescription来请求进行平均值计算,取名为AverageNo,通过这个名字,从fetch请求返回的字典中找到平均值

let description = NSExpressionDescription()

description.name = "AverageNo"

//指定要进行平均值计算的字段名classNo并设置返回值类型

let args  = [NSExpression(forKeyPath: "classNo")]

// forFunction参数有sum:求和 count:计算个数 min:最小值 max:最大值 average:平均值等等

description.expression = NSExpression(forFunction: "average:", arguments: args)

description.expressionResultType = .floatAttributeType

// 设置请求的propertiesToFetch属性为description告诉fetchRequest,我们需要对数据进行求平均值

fetchRequest.propertiesToFetch = [description]

do {

let entries =  try context.fetch(fetchRequest)

let result = entries.first! as! NSDictionary

let averageNo = result["AverageNo"]!

print("\(averageNo)")

} catch  {

print("failed")

}

}

//MARK:批量更新

func batchUpdate()

{

let batchUpdate = NSBatchUpdateRequest(entityName: "Class")

//所要更新的属性 和 更新的值

batchUpdate.propertiesToUpdate = ["name": 55555]

//被影响的Stores

batchUpdate.affectedStores = self.getContext().persistentStoreCoordinator!.persistentStores

//配置返回数据的类型

batchUpdate.resultType = .updatedObjectsCountResultType

//执行批量更新

do {

let batchResult = try getContext().execute(batchUpdate) as! NSBatchUpdateResult

//批量更新的结果,上面resultType类型指定为updatedObjectsCountResultType,所以result显示的为 更新的个数

print("\(batchResult.result!)")

} catch   {

print("error")

}

}

}

时间: 2024-10-10 21:15:00

Swift CoreData 增删改查的相关文章

iOS CoreData 增删改查详解

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理. 继承CoreData有两种方式: 创建项目时集成 这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDelega

IOS - CoreData 增删改查

#pragma mark - Core Data Methods - (void)insertObjectWithFileName:(NSString *)fileName { /** SQL新增记录的过程 1. 拼接一个INSERT的SQL语句 2. 执行SQL */ // 1. 实例化并让context“准备”将一条个人记录增加到数据库 ReaderDocument *document = [NSEntityDescription insertNewObjectForEntityForNam

CoreData 增删改查

#pragma mark - Core Data Methods - (void)insertObjectWithFileName:(NSString *)fileName { /** SQL新增记录的过程 1. 拼接一个INSERT的SQL语句 2. 执行SQL */ // 1. 实例化并让context“准备”将一条个人记录增加到数据库 ReaderDocument *document = [NSEntityDescription insertNewObjectForEntityForNam

CoreData 入门使用 增删改查 swift

首先新建一个 点击新建的testInfo.xcdatamodeld 会出现这么个界面 创建完testInfo.xcdatamodeld之后 AppDelegate 会自动帮你添加支持coredata的代码 有兴趣的自己研究 首先 使用coredata 存储数据 1.创建表 2.创建字段 3.创建对应字段的模型类 就足够了 创建表 点击 然后出现 添加字段 .................... 创建对应字段的模型  command+n  都勾上之后会自动帮你创建一个类  好 一切准备完毕.  

CoreData的增删改查和数据迁移示例

作为管理器,最基本的功能就是增删改查了. 1.插入 AppDelegate *app = [[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = [app managedObjectContext]; NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"entity

IOS之分析网易新闻存储数据(CoreData的使用,增删改查)

用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了新闻列表,因为我打开网易新闻的Documents时看到了三个文件: newsapp.sqlite,newsapp.sqlite-shm,newsapp.sqlite-wal:这三个文件是你在用CoreData时自动生成的.所以我确定他是用coredata存储的数据而不是sqlite数据库.(Core

CoreData的简单使用(二)数据的增删改查,轻量级的版本迁移

上一篇中我们已经使用CoreData创建了一个SQLite数据库 CoreData的简单使用(一)数据库的创建 现在对数据库进行数据的CRUD(增删改查) 1.Data Model 的设置 创建一个DataModel,取名CRUD.xcdatamodeld,添加Entity(Library和Book),添加属性,在Book中设置和Library的关联关系(一个Book可以存放在一个Library里) Book的属性和关联关系(选择Destination为Library,关系名称取名为librar

ios CoreData框架的使用,对上下文数据的增删改查,表与表之间的关联,1对多,1对1,谓词查询,多表连接

这里是只是代码,因为博客插入图片效果不是很好,我自己写的总结比较详细,有兴趣的朋友可以在评论里留下邮箱,我收到后会发给大家. 转载注明出处,重视原创者的劳动成果,谢谢! - (void)viewDidLoad { [super viewDidLoad]; [self _creatTable];//插入数据 //    [self _query];// 查询数据 // KVC很霸道,即使readonly通过kvc也可赋值,kvo精华 //    Book * book = [[Book alloc

iOS CoreData (一) 增删改查

代码地址如下:<br>http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象,通过CoreData管理应用程序的数据模型,可以极大程度减少需要编写的代码数量! ##一.运行效果##二.程序实现 1. 首先创建一个coreData 模型文件:系统