★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-rpickbfx-ma.html
➤若是连接不是山青咏芝的博客园地址,则多是爬取做者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持做者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目录:[Swift]通天遁地Swiftios
本文将演示使用开源类库实现CoreData数据的增删改查。git
首先确保在项目中已经安装了所需的第三方库。github
点击【Podfile】,查看安装配置文件。数据库
1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'AERecordDemo' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'AERecord' 7 end
根据配置文件中的相关配置,安装第三方库。编程
而后点击打开【DemoApp.xcworkspace】项目文件。swift
项目已经引入的数据持久化框架。数组
点击【AERecordeDemo.xcdatamodeld】文件安全
->点击添加实体图表,建立一个新的实体。微信
->输入实体的名称:People
->按下【Enter】完成实体名称的输入。
->给实体添加一个新的属性,
->【Attris】->【+】
->输入属性的名称:【name】,选择属性的类型:【String】
->【Attris】->【+】
->输入属性的名称:【age】,选择属性的类型:【Integer 16】
->【Attris】->【+】
->输入属性的名称:【favorite】,选择属性的类型:【String】
在项目文件夹【AppDemo】点击鼠标右键,弹出右键菜单,以建立一个基于管理对象的子类。
->【New File】->【Cocoa Touch】->【Next】->
【Class】:People
【Subclass of】:NSManagedObject
【Language】:Swift
->【Next】->【Create】
编写实体类【People.swift】
1 import UIKit 2 //引入须要用到的类库 3 import CoreData 4 5 //添加一个标识符, 6 //系统会自动给全部非私有的属性和成员,都加上该标识符。 7 //从而使旧的编程语言能够自由调用此处的类和属性。 8 @objc(People) 9 //建立一个继承自管理对象的类。 10 class People: NSManagedObject { 11 12 //添加被管理的属性, 13 //这些属性的名称和视图的属性相同。 14 @NSManaged var name: String 15 @NSManaged var age: Int 16 @NSManaged var favorites: String 17 18 }
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 //引入已经安装的第三方类库 3 import AERecord 4 import CoreData 5 6 class ViewController: UIViewController { 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 //加载数据存储堆栈 12 loadCoreDataStack() 13 //插入一些数据 14 addData() 15 //查询插入的数据 16 requestData() 17 //在数据库中查找不一样的数据 18 filterValues() 19 //在数据库中查找不一样属性的记录 20 filterRecords() 21 //实现对数据的修改操做 22 updateRecords() 23 //实现对数据的删除操做 24 deleteRecords() 25 //删除数据存储堆栈 26 destroyCoreDataStack() 27 } 28 29 //添加一个方法,用来加载数据存储堆栈 30 func loadCoreDataStack() 31 { 32 //经过一个异常捕捉语句, 33 do 34 { 35 //加载数据存储堆栈。 36 try AERecord.loadCoreDataStack() 37 } 38 catch 39 { 40 print(error) 41 } 42 } 43 44 //添加一个方法,用来插入一些数据 45 func addData() 46 { 47 //建立自定义类的初始化方法, 48 //建立四个对象,并设置对象的属性的值。 49 People.create(with: ["name": "Jerry", "age" : 21, "favorites" : "smile"]) 50 People.create(with: ["name": "John", "age" : 32, "favorites" : "smile"]) 51 People.create(with: ["name": "Peter", "age" : 43, "favorites" : "smile"]) 52 People.create(with: ["name": "Jerry", "age" : 21, "favorites" : "smile"]) 53 //经过调用第三方类库的类方法,保存刚刚建立的四条数据 54 AERecord.saveAndWait() 55 } 56 57 //添加一个方法,用来查询刚刚建立的四条数据, 58 //在本方法中,对刚刚保存的数据进行检索。 59 func requestData() 60 { 61 //初始化一个谓词对象,并设置检索的条件, 62 //这里设置从数据库中检索年龄大于30的数据。 63 let predicate = NSPredicate(format: " age >= 30 ", "") 64 //在控制台输出全部的数量 65 print("People.count():\(People.count())") 66 //在控制台输出,根据条件进行检索的数据数量。 67 print("People.count(with: predicate):\(People.count(with: predicate))") 68 69 //经过第三方类库提供的方法,能够得到数据库中的第一条数据。 70 print("People.first():\(String(describing: People.first()))") 71 //同时能够指定检索时的排序依据, 72 //这里设置年龄进行升序排序,并得到排序后的第一条数据。 73 print("orderedBy\(String(describing: People.first(orderedBy: "age")))") 74 75 //根据谓词条件检索数据,并返回第一条符合条件的数据。 76 print("predicate):\(String(describing: People.first(with: predicate)))") 77 78 //得到全部的数据,并将返回的数据,存储在一个数组中。 79 let array = People.all() 80 //对数组进行遍历操做,并在控制台输出遍历的元素。 81 for obj in array! 82 { 83 print(obj) 84 } 85 } 86 87 //添加一个方法,在数据库中查找不一样的数据 88 func filterValues() 89 { 90 //添加一个异常捕捉语句, 91 //用来执行数据的检索操做。 92 do 93 { 94 //经过获取不一样值的方法,得到数据中不一样的名称。 95 let array = try People.distinctValues(for: "name") 96 print(array as Any) 97 } 98 catch 99 { 100 print(error) 101 } 102 } 103 104 //添加一个方法,在数据库中查找不一样属性的记录 105 func filterRecords() 106 { 107 //初始化一个数组,表示名称和年龄两个属性。 108 let attributes = ["name", "age"] 109 //添加一个异常捕捉语句,用来执行数据的检索操做。 110 do 111 { 112 //经过获取不一样记录的方法, 113 //得到在数据中,拥有不一样名称和年龄的记录。 114 let array = try People.distinctRecords(for: attributes) 115 print(array as Any) 116 } 117 catch 118 { 119 print(error) 120 } 121 } 122 123 //添加一个方法,实现对数据的修改操做。 124 func updateRecords() 125 { 126 //经过批量更新的方法,能够对大量数据进行相同的编辑操做。 127 //此条语句将修改全部记录的名称属性的值 128 let result = People.batchUpdate(properties: ["name" : "John"]) 129 130 //初始化一个谓词对象,用来过滤须要更新的记录。 131 let predicate = NSPredicate(format: " age >= 30 ", "") 132 //再次调用批量更新的方法,获取年龄大于30的记录, 133 //并将这些记录的年龄修改成50. 134 let result2 = People.batchUpdate(properties: ["age" : 50], predicate: predicate, resultType: .statusOnlyResultType, in: AERecord.Context.default) 135 //在控制台输出批量更新方法的结果。 136 print("result:\(String(describing: result))") 137 print("result2:\(String(describing: result2))") 138 139 //调用第三方类库的保存并等待方法 140 AERecord.saveAndWait() 141 142 //执行两条批量更新的语句 143 filterRecords() 144 } 145 146 //添加一个方法,实现对数据的删除操做。 147 func deleteRecords() 148 { 149 //输出全部数据总的数量。 150 print(People.all()?.count ?? 0) 151 //调用删除所有方法,能够删除指定条件的数据。 152 People.deleteAll(with: "name", value: "Peter") 153 //调用第三方类库的保存并等待方法,执行此条删除语句。 154 AERecord.saveAndWait() 155 //再次输出全部数据总的数量。比较先后的变化。 156 print(People.all()?.count ?? 0) 157 158 //调用删除所有方法,能够删除全部的数据。 159 People.deleteAll() 160 AERecord.saveAndWait() 161 print(People.all()?.count ?? 0) 162 } 163 164 //添加一个方法,删除数据存储堆栈 165 func destroyCoreDataStack() 166 { 167 //添加一个异常捕捉语句 168 do 169 { 170 //经过调用第三方类库的方法,删除数据堆栈。 171 //以前存储的全部数据都将被清除。 172 try AERecord.destroyCoreDataStack() 173 print("---destroyCoreDataStack") 174 } 175 catch 176 { 177 print(error) 178 } 179 } 180 181 override func didReceiveMemoryWarning() { 182 super.didReceiveMemoryWarning() 183 // Dispose of any resources that can be recreated. 184 } 185 }