[Swift通天遁地]七、数据与安全-(4)使用开源类库实现CoreData数据的增删改查

[Swift通天遁地]七、数据与安全-(4)使用开源类库实现CoreData数据的增删改查,第1张

概述本文将演示使用开源类库实现CoreData数据增删改查。 首先确保在项目中已经安装了所需的第三方库。 点击【Podfile】,查看安装配置文件。 1 platform :ios, ‘12.0‘2 use_frameworks!3 4 target ‘AERecordDemo‘ do5 source ‘https://github.com/CocoaPods/Specs.g

本文将演示使用开源类库实现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@ 74@H_301_15@          75@H_301_15@         //@H_301_15@根据谓词条件检索数据,并返回第一条符合条件的数据。@H_301_15@ 76@H_301_15@         print("@H_301_15@predicate):\(String(describing: People.first(with: predicate)))@H_301_15@"@H_301_15@)@H_301_15@ 77@H_301_15@          78@H_301_15@         //@H_301_15@获得所有的数据,并将返回的数据,存储在一个数组中。@H_301_15@ 79@H_301_15@         let array = People.all()@H_301_15@ 80@H_301_15@         //@H_301_15@对数组进行遍历 *** 作,并在控制台输出遍历的元素。@H_301_15@ 81@H_301_15@         for@H_301_15@ obj in@H_301_15@ array! 82@H_301_15@         {@H_301_15@ 83@H_301_15@             print(obj)@H_301_15@ 84@H_301_15@         }@H_301_15@ 85@H_301_15@     }@H_301_15@ 86@H_301_15@      87@H_301_15@     //@H_301_15@添加一个方法,在数据库中查找不同的数据@H_301_15@ 88@H_301_15@     func filterValues()@H_301_15@ 89@H_301_15@     {@H_301_15@ 90@H_301_15@         //@H_301_15@添加一个异常捕捉语句,@H_301_15@ 91@H_301_15@         //@H_301_15@用来执行数据的检索 *** 作。@H_301_15@ 92@H_301_15@         do@H_301_15@ 93@H_301_15@         {@H_301_15@ 94@H_301_15@             //@H_301_15@通过获取不同值的方法,获得数据中不同的名称。@H_301_15@ 95@H_301_15@             let array = try@H_301_15@ People.distinctValues(for@H_301_15@: "@H_301_15@name@H_301_15@"@H_301_15@)@H_301_15@ 96@H_301_15@             print(array as@H_301_15@ Any)@H_301_15@ 97@H_301_15@         }@H_301_15@ 98@H_301_15@         catch@H_301_15@ 99@H_301_15@         {@H_301_15@100@H_301_15@             print(error)@H_301_15@101@H_301_15@         }@H_301_15@102@H_301_15@     }@H_301_15@103@H_301_15@     104@H_301_15@     //@H_301_15@添加一个方法,在数据库中查找不同属性的记录@H_301_15@105@H_301_15@     func filterRecords()@H_301_15@106@H_301_15@     {@H_301_15@107@H_301_15@         //@H_301_15@初始化一个数组,表示名称和年龄两个属性。@H_301_15@108@H_301_15@         let attributes = ["@H_301_15@name@H_301_15@"@H_301_15@,"@H_301_15@age@H_301_15@"@H_301_15@]@H_301_15@109@H_301_15@         //@H_301_15@添加一个异常捕捉语句,用来执行数据的检索 *** 作。@H_301_15@110@H_301_15@         do@H_301_15@111@H_301_15@         {@H_301_15@112@H_301_15@             //@H_301_15@通过获取不同记录的方法,@H_301_15@113@H_301_15@             //@H_301_15@获得在数据中,拥有不同名称和年龄的记录。@H_301_15@114@H_301_15@             let array = try@H_301_15@ People.distinctRecords(for@H_301_15@: attributes)@H_301_15@115@H_301_15@             print(array as@H_301_15@ Any)@H_301_15@116@H_301_15@         }@H_301_15@117@H_301_15@         catch@H_301_15@118@H_301_15@         {@H_301_15@119@H_301_15@             print(error)@H_301_15@120@H_301_15@         }@H_301_15@121@H_301_15@     }@H_301_15@122@H_301_15@     123@H_301_15@     //@H_301_15@添加一个方法,实现对数据的修改 *** 作。@H_301_15@124@H_301_15@     func updateRecords()@H_301_15@125@H_301_15@     {@H_301_15@126@H_301_15@         //@H_301_15@通过批量更新的方法,可以对大量数据进行相同的编辑 *** 作。@H_301_15@127@H_301_15@         //@H_301_15@此条语句将修改所有记录的名称属性的值@H_301_15@128@H_301_15@         let result = People.batchUpdate(propertIEs: ["@H_301_15@name@H_301_15@"@H_301_15@ : "@H_301_15@John@H_301_15@"@H_301_15@])@H_301_15@129@H_301_15@         130@H_301_15@         //@H_301_15@初始化一个谓词对象,用来过滤需要更新的记录。@H_301_15@131@H_301_15@         let predicate = nspredicate(format: "@H_301_15@ age >= 30 @H_301_15@"@H_301_15@,""@H_301_15@)@H_301_15@132@H_301_15@         //@H_301_15@再次调用批量更新的方法,获取年龄大于30的记录,@H_301_15@133@H_301_15@         //@H_301_15@并将这些记录的年龄修改为50.@H_301_15@134@H_301_15@         let result2 = People.batchUpdate(propertIEs: ["@H_301_15@age@H_301_15@"@H_301_15@ : 50@H_301_15@],predicate: predicate,resultType: .statusOnlyResultType,in@H_301_15@: AERecord.Context.default@H_301_15@)@H_301_15@135@H_301_15@         //@H_301_15@在控制台输出批量更新方法的结果。@H_301_15@136@H_301_15@         print("@H_301_15@result:\(String(describing: result))@H_301_15@"@H_301_15@)@H_301_15@137@H_301_15@         print("@H_301_15@result2:\(String(describing: result2))@H_301_15@"@H_301_15@)@H_301_15@138@H_301_15@         139@H_301_15@         //@H_301_15@调用第三方类库的保存并等待方法        @H_301_15@140@H_301_15@         AERecord.saveAnDWait()@H_301_15@141@H_301_15@         142@H_301_15@         //@H_301_15@执行两条批量更新的语句@H_301_15@143@H_301_15@         filterRecords()@H_301_15@144@H_301_15@     }@H_301_15@145@H_301_15@     146@H_301_15@     //@H_301_15@添加一个方法,实现对数据的删除 *** 作。@H_301_15@147@H_301_15@     func deleteRecords()@H_301_15@148@H_301_15@     {@H_301_15@149@H_301_15@         //@H_301_15@输出所有数据总的数量。@H_301_15@150@H_301_15@         print(People.all()?.count ?? 0@H_301_15@)@H_301_15@151@H_301_15@         //@H_301_15@调用删除全部方法,可以删除指定条件的数据。@H_301_15@152@H_301_15@         People.deleteall(with: "@H_301_15@name@H_301_15@"@H_301_15@,value: "@H_301_15@Peter@H_301_15@"@H_301_15@)@H_301_15@153@H_301_15@         //@H_301_15@调用第三方类库的保存并等待方法,执行此条删除语句。@H_301_15@154@H_301_15@         AERecord.saveAnDWait()@H_301_15@155@H_301_15@         //@H_301_15@再次输出所有数据总的数量。比较前后的变化。@H_301_15@156@H_301_15@         print(People.all()?.count ?? 0@H_301_15@)@H_301_15@157@H_301_15@         158@H_301_15@         //@H_301_15@调用删除全部方法,可以删除所有的数据。@H_301_15@159@H_301_15@         People.deleteall()@H_301_15@160@H_301_15@         AERecord.saveAnDWait()@H_301_15@161@H_301_15@         print(People.all()?.count ?? 0@H_301_15@)@H_301_15@162@H_301_15@     }@H_301_15@163@H_301_15@     164@H_301_15@     //@H_301_15@添加一个方法,删除数据存储堆栈@H_301_15@165@H_301_15@     func destroyCoreDataStack()@H_301_15@166@H_301_15@     {@H_301_15@167@H_301_15@         //@H_301_15@添加一个异常捕捉语句@H_301_15@168@H_301_15@         do@H_301_15@169@H_301_15@         {@H_301_15@170@H_301_15@             //@H_301_15@通过调用第三方类库的方法,删除数据堆栈。@H_301_15@171@H_301_15@             //@H_301_15@之前存储的所有数据都将被清除。@H_301_15@172@H_301_15@             try@H_301_15@ AERecord.destroyCoreDataStack()@H_301_15@173@H_301_15@             print("@H_301_15@---destroyCoreDataStack@H_301_15@"@H_301_15@)@H_301_15@174@H_301_15@         }@H_301_15@175@H_301_15@         catch@H_301_15@176@H_301_15@         {@H_301_15@177@H_301_15@             print(error)@H_301_15@178@H_301_15@         }@H_301_15@179@H_301_15@     }@H_301_15@180@H_301_15@     181@H_301_15@     overrIDe@H_301_15@ func dIDReceiveMemoryWarning() {@H_301_15@182@H_301_15@         super.dIDReceiveMemoryWarning()@H_301_15@183@H_301_15@         //@H_301_15@ dispose of any resources that can be recreated.@H_301_15@184@H_301_15@     }@H_301_15@185@H_301_15@ }
总结

以上是内存溢出为你收集整理的[Swift通天遁地]七、数据与安全-(4)使用开源类库实现CoreData数据的增删改查全部内容,希望文章能够帮你解决[Swift通天遁地]七、数据与安全-(4)使用开源类库实现CoreData数据的增删改查所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1020679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存