在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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("测试读取")
|
请发表评论