由于最近写了个 gank.io
客户端,鬼使神差的想添加一个收藏功能,并且秉着努力学习新知识的原则,所以我在该项目中试了一下水,感觉还不错,在此,分享出来,供新手参考参考。
特别声明: 感谢干货集中营开源的接口。 干货集中营是一个不错的网站,希望越来越好。
- 创建一个新工程,在AppDelegate里面多了下面方法。
- 如果你已经创建好工程,但是没勾选上面选项,没关系,新建一个CoreData文件
但是AppDelegate里面没东西,没关系,新建一个新项目,将里面的内容拷进你的项目,但是你得修改一个地方 - 新建一个实体
双击修改名字 - 添加属性
- 新建NSManagedObject,通过Core Data从数据库取出的对象,默认情况下都是NSManagedObject对象
next -> next -> next OK,多了两个文件 - KL_Test+CoreDataProperties.swift 不需要变
- KL_Test.swift 添加增删查改的方法
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
119
120
121
122
123
124
125
126
127
128import Foundation
import CoreData
import UIKit
@objc(CollectGank)
class KL_Test: NSManagedObject {
static let app = UIApplication.sharedApplication().delegate as! AppDelegate
static let context = app.managedObjectContext
// 插入
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)")
}
}
}