// 1. 建立模型文件
// 2. 建立CoreDataStack
// 3. 设置AppDelegate

接着

//
// CoreDataStack.swift
// CoreDataStackDemo
//
// Created by wangbiao on 15/10/29.
// Copyright © 2015年 wangbiao. All rights reserved.
// import CoreData class CoreDataStack: NSObject {
// MARK: - Properties
let context: NSManagedObjectContext
let coordinator: NSPersistentStoreCoordinator
let model: NSManagedObjectModel
let store: NSPersistentStore? // MARK: - Singleton
static func defaultStack() -> CoreDataStack {
return instance
} fileprivate static let instance = CoreDataStack() fileprivate override init() {
// 构建托管对象模型
let bundle = Bundle.main
let modelURL = bundle.url(forResource: "Test", withExtension: "momd")!
model = NSManagedObjectModel(contentsOf: modelURL)! // 构建持久化存储助理
coordinator = NSPersistentStoreCoordinator(managedObjectModel: model) // 构建托管对象上下文,并且将助理连接到上下文
context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.persistentStoreCoordinator = coordinator // 构建持久化存储
let manager = FileManager.default
let urls = manager.urls(for: .documentDirectory, in: .userDomainMask)
let documentsURL = urls.first!
let storeURL = documentsURL.appendingPathComponent("Test") store = (try! coordinator.addPersistentStore(ofType: NSSQLiteStoreType,
configurationName: nil, at: storeURL, options: nil))
} // MARK: - Function
func saveContext () {
if context.hasChanges {
do {
try context.save()
} catch {
print("Save failed...")
}
}
}
}

接着实现数据操作

//新增数据
func insertStudent(sno: String, name: String, score: Int) {
// 获取上下文(也就是从”coreData基础“里面的那个类里面获取)
let context = CoreDataStack.defaultStack().context // 构建实体对象
let student = NSEntityDescription.insertNewObject(forEntityName: "Student",
into: context) as! Student // 设置相关属性
student.sno = sno
student.name = name
student.score = score as NSNumber?
} // 查询数据
func fetchStudents() {
// 获取上下文
let context = CoreDataStack.defaultStack().context // 构建抓取请求
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student") // 指定按照学号(sno)升序排列
let sort = NSSortDescriptor(key: "sno", ascending: true,
selector: #selector(NSString.localizedStandardCompare(_:)))
request.sortDescriptors = [sort] // 构建查询条件
// request.predicate = NSPredicate(format: "score > 60")
// request.predicate = NSPredicate(format: "name like 'a*'") do {
let students = (try context.fetch(request)) as! [Student]
for student in students {
print("\(student.sno!), \(student.name!), \(student.score!)")
}
} catch {
print("Fetch failed...")
}
} // 统计信息
func countStudents() {
// // 1. 统计分数大于90的人数
//
// // 获取上下文
// let context = CoreDataStack.defaultStack().context
//
// // 构建抓取请求
// let request = NSFetchRequest(entityName: "Student")
// request.predicate = NSPredicate(format: "score > 90")
// request.resultType = .CountResultType
//
// do {
// let entries = (try context.executeFetchRequest(request))
// let count = entries.first!.integerValue
// print("Count: \(count)")
// } catch {
// print("Fetch failed...")
// } // 2. 计算平均分数 // 获取上下文
let context = CoreDataStack.defaultStack().context // 构建抓取请求
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
request.resultType = .dictionaryResultType // 指定返回结果为字典 // 构建表达式
let description = NSExpressionDescription()
description.name = "AverageScore"
let args = [NSExpression(forKeyPath: "score")]
description.expression = NSExpression(forFunction: "average:", arguments: args)
description.expressionResultType = .floatAttributeType // 指定返回值类型 // 将求平均值的表达式设置给request的属性
request.propertiesToFetch = [description] do {
let entries = (try context.fetch(request))
let result = entries.first! as! NSDictionary
let averageScore = result["AverageScore"]!
print("Average: \(averageScore)")
} catch {
print("Fetch failed...")
}
} // 修改数据
func updateStudents() {
// 获取上下文
let context = CoreDataStack.defaultStack().context // 构建抓取请求
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
request.predicate = NSPredicate(format: "name like 'a*'") do {
let students = (try context.fetch(request)) as! [Student]
for student in students {
student.score =
}
} catch {
print("Fetch failed...")
} // 保存
CoreDataStack.defaultStack().saveContext() // 备注: 批量更新 & 异步操作 ???
} // 删除数据
func deleteStudents() {
// 获取上下文
let context = CoreDataStack.defaultStack().context // 构建抓取请求
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
request.predicate = NSPredicate(format: "score < 60") do {
let students = (try context.fetch(request)) as! [Student]
for student in students {
context.delete(student)
}
} catch {
print("Fetch failed...")
} // 保存
CoreDataStack.defaultStack().saveContext()
}
总结:
增:
1:获取上下文
如:let context = CoreDataStack.defaultStack().context
2:构建实体对象
如:let student = NSEntityDescription.insertNewObject(forEntityName: "Student",
into: context) as! Student
3:设置相关属性
如: student.sno = sno
4:保存数据
如:CoreDataStack.defaultStack().saveContext()
 
修改,删除
1:获取上下文
2:构建抓取请求
如:let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
3:给抓去请求设置相关属性吧
如:
//相当于给它设置约束
request.predicate = NSPredicate(format: "name like 'a*'")
// 指定返回结果为字典(修改,删除一般不用设置这个)
request.resultType = .dictionaryResultType
4:执行抓取操作
do {
let students = (try context.fetch(request)) as! [Student]
for student in students {
//修改如:student.score = 100
//删除如:context.delete(student)
}
} catch {
print("Fetch failed...")
}
5:保存数据
 
查询
1:获取上下文
2:构建抓取请求
3:指定按照学号(sno)升序排列(其实此部可以省略)
let sort = NSSortDescriptor(key: "sno", ascending: true,
selector: #selector(NSString.localizedStandardCompare(_:)))
request.sortDescriptors = [sort]
4:执行抓取语句
do {
let students = (try context.fetch(request)) as! [Student]
for student in students {
print("\(student.sno!), \(student.name!), \(student.score!)")
}
} catch {
print("Fetch failed...")
}
5:释放资源
 
统计
1:获取上下文
2:构建抓取请求
3:指定按照学号(sno)升序排列(其实此部可以省略)
let sort = NSSortDescriptor(key: "sno", ascending: true,
selector: #selector(NSString.localizedStandardCompare(_:)))
request.sortDescriptors = [sort]
4: 构建表达式(average是聚合函数,当然还有其他的)
如:let description = NSExpressionDescription()
description.name = "AverageScore"
let args = [NSExpression(forKeyPath: "score")]
description.expression = NSExpression(forFunction: "average:", arguments: args)
description.expressionResultType = .floatAttributeType // 指定返回值类型
5:将求平均值的表达式设置给request的属性
如request.propertiesToFetch = [description]
4:执行抓取语句
do {
let entries = (try context.fetch(request))
let result = entries.first! as! NSDictionary
let averageScore = result["AverageScore"]!
print("Average: \(averageScore)")
} catch {
print("Fetch failed...")
}
5:释放资源
 
当然,这个只是一个例子而已,不是所有的统计例子都要那么复杂的
如下面这个例子
// 1. 统计分数大于90的人数
//
// // 获取上下文
// let context = CoreDataStack.defaultStack().context
//
// // 构建抓取请求
// let request = NSFetchRequest(entityName: "Student")
// request.predicate = NSPredicate(format: "score > 90")
// request.resultType = .CountResultType
//
// do {
// let entries = (try context.executeFetchRequest(request))
// let count = entries.first!.integerValue
// print("Count: \(count)")
// } catch {
// print("Fetch failed...")
// }

coreData数据操作的更多相关文章

  1. MagicalRecord 多表关联数据操作

    最近在使用MagicalRecord做数据持久层CoreData的操作库,今天做了一个多表关联数据的操作,整理了一个demo,特此记录一下. 关于如何使用Cocopads 和 MagicalRecor ...

  2. iOS数据库操作之coredata详细操作步骤

    CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/ ...

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

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

  4. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  5. hive数据操作

    mdl是数据操作类的语言,包括向数据表加载文件,写查询结果等操作 hive有四种导入数据的方式 >从本地加载数据 LOAD DATA LOCAL INPATH './examples/files ...

  6. Dapper 数据操作框架

    数据操作DapperFrom NuGet:Install-Package DapperorInstall-Package Dapper.StrongName微型ORM:PetaPoco获得PetaPo ...

  7. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  8. Entity Framework 5.0系列之数据操作

    Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...

  9. 数据操作语言DML与运算符

    数据操作语言DML(添加,修改,删除) 1.添加数据 insert into insert into 表名 (字段列表) values (值列表),值列表要和字段列表按顺序匹配. insert int ...

随机推荐

  1. UML Sequence sample: if-else

    if (balance >= amount) { ... } else { ... }

  2. 关于oracle中创建新表时将我们要用的表的结构和数据都复制过去

    今天在oracle中遇到了一个问题,就是给我查询出来了一张表的数据,只有部分的字段,让我将这张表的结构和数据放到新的临时表中,并进行数据的查询. 我是这样做的: 如:create table tabl ...

  3. 解决NetBeans编辑器中文乱码问题

    在JDK→JRE→lib目录下找到fontconfig.properties.src文件,打开,找到# Component Font Mappings,表示字体映射,可以看到下面列出了几种字体映射集合 ...

  4. OC Runtime

    OC 是面向运行时的语言.Runtime就是系统在运行的时候的一些机制,其中最主要的是消息发送机制.OC语言与其他语言(如C语言)在函数(方法)的调用有很大的不同.C语言,函数的调用在编译的时候就已经 ...

  5. Android IOS WebRTC 音视频开发总结(八十一)-- WebRTC靠谱吗?有没有适合的SDK推荐?

    作者:blaker,最早发表在我们的微信公众和[编风网],详见[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn) ...

  6. PS1应用之——修改linux终端命令行各字体颜色

    最近在学习linux操作系统(CentOS 6 & CentOS 7).觉得linux终端命令行全部为白色,会经常导致命令与输出内容难以分辨.于是上网找到修改linux终端命令行颜色的方法,发 ...

  7. 答:SQLServer DBA 三十问之二:系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库)

    2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么:损坏了如何做还原(主要是master库): master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布, ...

  8. XHProf中文手册

    目录 导言 XHProf 概况 安装XHProf扩展 使用XHProf进行性能分析 设置XHProf用户界面 在生产环境中使用XHProf注意事项 轻量级采样模式 附加功能 信赖 鸣谢 导言 XHPr ...

  9. redis 与 spring整合 hash 增删改操作 list增删改操作

    本人,对于以前redis的学习是非常痛苦的!近期将以前的东西捡起来.以博客的形式存储,以便于以后快速捡起来,并和广大同胞一起分享! 1):简单介绍 redis 是基于C语言开发. redis是一个ke ...

  10. GIS基本概念

    简介 WKT(Well-known text)是开放地理空间联盟OGC(Open GIS Consortium )制定的一种文本标记语言,用于表示矢量几何对象.空间参照系统及空间参照系统之间的转换. ...