怎么创建相关文件我这里不在叙述,在这片文章中主要是coredata的基本操作,即增删改
在 .xcdatamodeld 文件中创建了一个实例entities, 名为Info, 添加两项属性,age:Integer 32 和 name:String
接下来都是在ViewController.swift中操作
首先 import CoreData
import CoreData
接下来,我们来获取上下文对象,并且封装成一个函数
//获取上下文对象
func getContext()->NSManagedObjectContext{
//获取总代理
let appDelegate = UIApplication.shared.delegate as! AppDelegate
//获取托管对象总管
//let managedObjectContect = appDelegate.persistentContainer.viewContext
//返回托管对象总管
return appDelegate.persistentContainer.viewContext
}
这样后面想要获取上下文对象就使用这一函数,例如
let context = getContext()
我把所有操作都封装成函数,可以根据需求编写不同的参数
增
//增
func infoInsert(name:String,age:Int32){
//获取上下文
let context = getContext()
//在Info中创建一条记录
let newRecord = NSEntityDescription.insertNewObject(forEntityName: "Info", into: context) as! Info
//写入新纪录的值
newRecord.name = name
newRecord.age = age
//保存
do{
try context.save()
}catch{
fatalError()
}
}
删
用predicate过滤出想要的记录,在(format: "name == %@", name) 中,后面的name是一个变量的名字,就是按照该变量来过滤,前者中的name是Info中的属性名。
查询结果可能会有多个,本例子中就是多条记录name相同,所以用一个数组来保存,若是想要筛选结果唯一,那就通过特殊Info属性来查找,例如在Info添加一条属性,保存身份证,或学号、工号这种不会相同的,查出来的结果就唯一了。
//删
func infoDelete(name:String){
//获取上下文
let context = getContext()
//抓取Info内容
let fetchRequest:NSFetchRequest = Info.fetchRequest()
//按要求过滤
fetchRequest.predicate = NSPredicate(format: "name == %@", name)
do{
//保存过滤出的结果
let result:[Info] = try context.fetch(fetchRequest)
for one in result{
//结果全部删除
context.delete(one)
}
try context.save()
}catch{
fatalError()
}
}
改
修改的操作和删除基本一样,即使查找出来,删除操作改为修改,然后保存回去。查询操作亦是如此。
//改
func infoChange(name:String,newName:String,newAge:Int32){
//获取上下文
let context = getContext()
//抓取Info内容
let fetchRequest:NSFetchRequest = Info.fetchRequest()
//按要求过滤
fetchRequest.predicate = NSPredicate(format: "name == %@", name)
do{
//结果全部删除
let result:[Info] = try context.fetch(fetchRequest)
for one in result{
//修改
one.name = newName
one.age = newAge
}
try context.save()
}catch{
fatalError()
}
}
全部数据拿出来存放在数组里面
var info:[Info] = [Info]()
通过函数,info = getAllInfo()把所有数据全部放入infoz中
//获取所有数据
func getAllInfo()->[Info]{
let context = getContext()
let fetchRequest:NSFetchRequest = Info.fetchRequest()
do{
let result = try context.fetch(fetchRequest)
return result
}catch{
fatalError("读取失败")
}
}