本文将演示使用开源类库实现CoreData数据的增删改查。
首先确保在项目中已经安装了所需的第三方库。
点击【Podfile】,查看安装配置文件。
1@H_301_15@ platform :ios,‘@H_301_15@12.0@H_301_15@‘@H_301_15@2@H_301_15@ use_frameworks!3@H_301_15@ 4@H_301_15@ target ‘@H_301_15@AERecordDemo@H_301_15@‘@H_301_15@ do@H_301_15@5@H_301_15@ source ‘@H_301_15@https://github.com/CocoaPods/Specs.git@H_301_15@‘@H_301_15@6@H_301_15@ pod ‘@H_301_15@AERecord@H_301_15@‘@H_301_15@7@H_301_15@ end
根据配置文件中的相关配置,安装第三方库。
然后点击打开【DemoApp.xcworkspace】项目文件。
项目已经引入的数据持久化框架。
点击【AERecordeDemo.xcdatamodeld】文件
->点击添加实体图表,创建一个新的实体。
->输入实体的名称:People
->按下【Enter】完成实体名称的输入。
->给实体添加一个新的属性,
->【Attris】->【+】
->输入属性的名称:【name】,选择属性的类型:【String】
->【Attris】->【+】
->输入属性的名称:【age】,选择属性的类型:【Integer 16】
->【Attris】->【+】
->输入属性的名称:【favorite】,选择属性的类型:【String】
在项目文件夹【AppDemo】点击鼠标右键,d出右键菜单,以创建一个基于管理对象的子类。
->【New file】->【Cocoa touch】->【Next】->
【Class】:People
【Subclass of】:NSManagedobject
【Language】:Swift
->【Next】->【Create】
编写实体类【People.swift】
1@H_301_15@ import UIKit@H_301_15@ 2@H_301_15@ //@H_301_15@引入需要用到的类库@H_301_15@ 3@H_301_15@ import CoreData@H_301_15@ 4@H_301_15@ 5@H_301_15@ //@H_301_15@添加一个标识符,@H_301_15@ 6@H_301_15@ //@H_301_15@系统会自动给所有非私有的属性和成员,都加上该标识符。@H_301_15@ 7@H_301_15@ //@H_301_15@从而使旧的编程语言可以自由调用此处的类和属性。@H_301_15@ 8@H_301_15@ @objc(People)@H_301_15@ 9@H_301_15@ //@H_301_15@创建一个继承自管理对象的类。@H_301_15@10@H_301_15@ class@H_301_15@ People: NSManagedobject {@H_301_15@11@H_301_15@ 12@H_301_15@ //@H_301_15@添加被管理的属性,@H_301_15@13@H_301_15@ //@H_301_15@这些属性的名称和视图的属性相同。@H_301_15@14@H_301_15@ @NSManaged var@H_301_15@ name: String@H_301_15@15@H_301_15@ @NSManaged var@H_301_15@ age: Int@H_301_15@16@H_301_15@ @NSManaged var@H_301_15@ favorites: String@H_301_15@17@H_301_15@ 18@H_301_15@ }
在项目导航区,打开视图控制器的代码文件【VIEwController.swift】
1@H_301_15@ import UIKit@H_301_15@ 2@H_301_15@ //@H_301_15@引入已经安装的第三方类库@H_301_15@ 3@H_301_15@ import AERecord@H_301_15@ 4@H_301_15@ import CoreData@H_301_15@ 5@H_301_15@ 6@H_301_15@ class@H_301_15@ VIEwController: UIVIEwController {@H_301_15@ 7@H_301_15@ 8@H_301_15@ overrIDe@H_301_15@ func vIEwDIDLoad() {@H_301_15@ 9@H_301_15@ super.vIEwDIDLoad()@H_301_15@ 10@H_301_15@ //@H_301_15@ Do any additional setup after loading the vIEw,typically from a nib.@H_301_15@ 11@H_301_15@ //@H_301_15@加载数据存储堆栈@H_301_15@ 12@H_301_15@ loadCoreDataStack()@H_301_15@ 13@H_301_15@ //@H_301_15@插入一些数据@H_301_15@ 14@H_301_15@ addData()@H_301_15@ 15@H_301_15@ //@H_301_15@查询插入的数据@H_301_15@ 16@H_301_15@ requestData()@H_301_15@ 17@H_301_15@ //@H_301_15@在数据库中查找不同的数据@H_301_15@ 18@H_301_15@ filterValues()@H_301_15@ 19@H_301_15@ //@H_301_15@在数据库中查找不同属性的记录@H_301_15@ 20@H_301_15@ filterRecords()@H_301_15@ 21@H_301_15@ //@H_301_15@实现对数据的修改 *** 作@H_301_15@ 22@H_301_15@ updateRecords()@H_301_15@ 23@H_301_15@ //@H_301_15@实现对数据的删除 *** 作@H_301_15@ 24@H_301_15@ deleteRecords()@H_301_15@ 25@H_301_15@ //@H_301_15@删除数据存储堆栈@H_301_15@ 26@H_301_15@ destroyCoreDataStack()@H_301_15@ 27@H_301_15@ }@H_301_15@ 28@H_301_15@ 29@H_301_15@ //@H_301_15@添加一个方法,用来加载数据存储堆栈@H_301_15@ 30@H_301_15@ func loadCoreDataStack()@H_301_15@ 31@H_301_15@ {@H_301_15@ 32@H_301_15@ //@H_301_15@通过一个异常捕捉语句,@H_301_15@ 33@H_301_15@ do@H_301_15@ 34@H_301_15@ {@H_301_15@ 35@H_301_15@ //@H_301_15@加载数据存储堆栈。@H_301_15@ 36@H_301_15@ try@H_301_15@ AERecord.loadCoreDataStack()@H_301_15@ 37@H_301_15@ }@H_301_15@ 38@H_301_15@ catch@H_301_15@ 39@H_301_15@ {@H_301_15@ 40@H_301_15@ print(error)@H_301_15@ 41@H_301_15@ }@H_301_15@ 42@H_301_15@ }@H_301_15@ 43@H_301_15@ 44@H_301_15@ //@H_301_15@添加一个方法,用来插入一些数据@H_301_15@ 45@H_301_15@ func addData()@H_301_15@ 46@H_301_15@ {@H_301_15@ 47@H_301_15@ //@H_301_15@创建自定义类的初始化方法,@H_301_15@ 48@H_301_15@ //@H_301_15@创建四个对象,并设置对象的属性的值。@H_301_15@ 49@H_301_15@ People.create(with: ["@H_301_15@name@H_301_15@"@H_301_15@: "@H_301_15@Jerry@H_301_15@"@H_301_15@,"@H_301_15@age@H_301_15@"@H_301_15@ : 21@H_301_15@,"@H_301_15@favorites@H_301_15@"@H_301_15@ : "@H_301_15@smile@H_301_15@"@H_301_15@])@H_301_15@ 50@H_301_15@ People.create(with: ["@H_301_15@name@H_301_15@"@H_301_15@: "@H_301_15@John@H_301_15@"@H_301_15@,"@H_301_15@age@H_301_15@"@H_301_15@ : 32@H_301_15@,"@H_301_15@favorites@H_301_15@"@H_301_15@ : "@H_301_15@smile@H_301_15@"@H_301_15@])@H_301_15@ 51@H_301_15@ People.create(with: ["@H_301_15@name@H_301_15@"@H_301_15@: "@H_301_15@Peter@H_301_15@"@H_301_15@,"@H_301_15@age@H_301_15@"@H_301_15@ : 43@H_301_15@,"@H_301_15@favorites@H_301_15@"@H_301_15@ : "@H_301_15@smile@H_301_15@"@H_301_15@])@H_301_15@ 52@H_301_15@ People.create(with: ["@H_301_15@name@H_301_15@"@H_301_15@: "@H_301_15@Jerry@H_301_15@"@H_301_15@,"@H_301_15@favorites@H_301_15@"@H_301_15@ : "@H_301_15@smile@H_301_15@"@H_301_15@])@H_301_15@ 53@H_301_15@ //@H_301_15@通过调用第三方类库的类方法,保存刚刚创建的四条数据@H_301_15@ 54@H_301_15@ AERecord.saveAnDWait()@H_301_15@ 55@H_301_15@ }@H_301_15@ 56@H_301_15@ 57@H_301_15@ //@H_301_15@添加一个方法,用来查询刚刚创建的四条数据,@H_301_15@ 58@H_301_15@ //@H_301_15@在本方法中,对刚刚保存的数据进行检索。@H_301_15@ 59@H_301_15@ func requestData()@H_301_15@ 60@H_301_15@ {@H_301_15@ 61@H_301_15@ //@H_301_15@初始化一个谓词对象,并设置检索的条件,@H_301_15@ 62@H_301_15@ //@H_301_15@这里设置从数据库中检索年龄大于30的数据。@H_301_15@ 63@H_301_15@ let predicate = nspredicate(format: "@H_301_15@ age >= 30 @H_301_15@"@H_301_15@,""@H_301_15@)@H_301_15@ 64@H_301_15@ //@H_301_15@在控制台输出所有的数量@H_301_15@ 65@H_301_15@ print("@H_301_15@People.count():\(People.count())@H_301_15@"@H_301_15@)@H_301_15@ 66@H_301_15@ //@H_301_15@在控制台输出,根据条件进行检索的数据数量。@H_301_15@ 67@H_301_15@ print("@H_301_15@People.count(with: predicate):\(People.count(with: predicate))@H_301_15@"@H_301_15@)@H_301_15@ 68@H_301_15@ 69@H_301_15@ //@H_301_15@通过第三方类库提供的方法,可以获得数据库中的第一条数据。@H_301_15@ 70@H_301_15@ print("@H_301_15@People.first():\(String(describing: People.first()))@H_301_15@"@H_301_15@)@H_301_15@ 71@H_301_15@ //@H_301_15@同时可以指定检索时的排序依据,@H_301_15@ 72@H_301_15@ //@H_301_15@这里设置年龄进行升序排序,并获得排序后的第一条数据。@H_301_15@ 73@H_301_15@ print("@H_301_15@orderedBy\(String(describing: People.first(orderedBy: @H_301_15@"@H_301_15@age"@H_301_15@)))@H_301_15@"@H_301_15@)@H_301_15@