CoreData使用
由于最近写了个 gank.io 客户端,鬼使神差的想添加一个收藏功能,并且秉着努力学习新知识的原则,所以我在该项目中试了一下水,感觉还不错,在此,分享出来,供新手参考参考。 特别声明: 感谢干货集中营开源的接口。 干货集中营是一个不错的网站,希望越来越好。
- 创建一个新工程,在AppDelegate里面多了下面方法。

- 如果你已经创建好工程,但是没勾选上面选项,没关系,新建一个CoreData文件
但是AppDelegate里面没东西,没关系,新建一个新项目,将里面的内容拷进你的项目,但是你得修改一个地方 
- 新建一个实体
双击修改名字 - 添加属性

- 新建NSManagedObject,通过Core Data从数据库取出的对象,默认情况下都是NSManagedObject对象
next -> next -> next OK,多了两个文件 - KL_Test+CoreDataProperties.swift 不需要变
- KL_Test.swift 添加增删查改的方法 ``` import Foundation import CoreData import UIKit
@objc(CollectGank) class KL_Test: NSManagedObject { static let app = UIApplication.sharedApplication().delegate as! AppDelegate static let context = app.managedObjectContext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// 插入
static func insert(model: KL_Test) {
let collectGank = NSEntityDescription.insertNewObjectForEntityForName("KL_Test",inManagedObjectContext: context) as! KL_Test
collectGank.name = model.name
collectGank.age = model.age
do {
try context.save()
print("成功")
}catch {
fatalError("不能保存\(error)")
}
}
// 查询所有的数据并返回
static func fetch() -> [KL_Test] {
var array = [KL_Test]()
//声明数据的请求
let fetchRequest:NSFetchRequest = NSFetchRequest()
//声明一个实体结构
let entity:NSEntityDescription? = NSEntityDescription.entityForName("KL_Test", inManagedObjectContext: context)
//设置数据请求的实体结构
fetchRequest.entity = entity
//查询操作
do {
let fetchedObjects:[AnyObject]? = try context.executeFetchRequest(fetchRequest)
//遍历查询的结果
print(fetchedObjects)
array = fetchedObjects as! [KL_Test]
}catch {
fatalError("不能保存:\(error)")
}
return array
}
// 修改
static func update(gank: KL_Test) {
//声明数据的请求
let fetchRequest:NSFetchRequest = NSFetchRequest()
fetchRequest.fetchLimit = 1 //限定查询结果的数量
fetchRequest.fetchOffset = 0 //查询的偏移量
//声明一个实体结构
let entity:NSEntityDescription? = NSEntityDescription.entityForName("KL_Test", inManagedObjectContext: context)
//设置数据请求的实体结构
fetchRequest.entity = entity
//设置查询条件
let predicate = NSPredicate(format: "name = 'kellen' ")
fetchRequest.predicate = predicate
//查询操作
do {
let fetchedObjects:[AnyObject]? = try context.executeFetchRequest(fetchRequest)
//遍历查询的结果
print(fetchedObjects)
try context.save()
}catch {
fatalError("不能保存:\(error)")
}
}
// 是否存在(查找)
static func exist(gank: KL_Test) -> Bool {
//声明数据的请求
let fetchRequest:NSFetchRequest = NSFetchRequest()
//声明一个实体结构
let entity:NSEntityDescription? = NSEntityDescription.entityForName("KL_Test", inManagedObjectContext: context)
//设置数据请求的实体结构
fetchRequest.entity = entity
//设置查询条件
let predicate = NSPredicate(format: "name = '\(gank.name)' ")
fetchRequest.predicate = predicate
//查询操作
do {
let fetchedObjects:[AnyObject]? = try context.executeFetchRequest(fetchRequest)
//遍历查询的结果
guard (fetchedObjects != nil && fetchedObjects!.count > 0) else {
return false
}
return true
}catch {
fatalError("不能保存:\(error)")
}
}
// 删除
static func deleted(gank: KL_Test) {
//声明数据的请求
let fetchRequest:NSFetchRequest = NSFetchRequest()
//声明一个实体结构
let entity:NSEntityDescription? = NSEntityDescription.entityForName("CollectGank", inManagedObjectContext: context)
//设置数据请求的实体结构
fetchRequest.entity = entity
//设置查询条件
let predicate = NSPredicate(format: "name = '\(gank.name)'")
fetchRequest.predicate = predicate
//查询操作
do {
let fetchedObjects:[AnyObject]? = try context.executeFetchRequest(fetchRequest)
print(fetchedObjects)
//遍历查询的结果
for info:KL_Test in fetchedObjects as! [KL_Test]{
//删除对象
context.deleteObject(info)
}
//重新保存-更新到数据库
try context.save()
}catch {
fatalError("不能保存:\(error)")
}
} } ```
本文由作者按照 CC BY 4.0 进行授权