[Xcode 实际操作]七、文件与数据-(11)数据持久化存储框架CoreData的使用:创建CoreData实体并插入数据
本文将演示【CoreData】数据持久化存储框架的使用。
点击【Create a new Xcode project】创建一个新的项目
->【Single View App】选择创建一个简单的单视图应用->【Next】
【Product Name】:CoreDataProject
勾选使用【CoreData】数据持久化存储框架的复选框,在项目中引入该框架。
数据持久化存储框架【CoreData】提供了对象关系的映射功能,
它能够将对象转化为数据,也能够将保存在数据库中的数据,还原成对象
->【Next】->选择项目存放目录->【Create】
在项目导航区,点击打开配置管理文件【CoreDataProject.xcdatamodeId】
点击底部的【+(Add Entity)】添加按钮,添加一个实体对象。
在实体列表【ENTITIES】列表中,选择刚刚创建的实体,并给实体重新命名:【User】
在【Attribute】属性设置区,点击【+】图标,为实体添加一个属性。
然后输入属性的名称和选择属性的类型
【Attribute】:userName
【Type】:String
点击【+】图标,为实体添加第二个属性。
然后输入属性的名称和选择属性的类型
【Attribute】:password
【Type】:String
已经创建了两个属性。点击右下角【Editor Style】编辑器样式图标,切换实体编辑器的样式。
在实体编辑器的图形模式下,如果项目中有多个实体,
可以方便的查看实体之间的关系。
接着点击顶部的编辑菜单【Editor】->【CreateNSManagedObject Subclass】创建管理对象子类
在数据模型列表中,保持默认选择的需要管理的数据模型【CoreDataProject】
->【Next】在实体列表中,选择需要生成挂历对象子类的实体模型:【User】
->【Next】保持默认的存储位置,点击创建【Create】按钮,完成实体类的创建操作。
在代码中,可以看出增加了一个扩展,该扩展拥有和实体相同的属性,
在项目导航区,打开并查看实体类和实体之间的关联文件:
【User+CoreDataClass.swift】
【User+CoreDataProperties.swift】
自动创建的代码文件存在多个错误,可以点击【编译并运行按钮】
此时会出现一些错误提示,点击打开之前创建的数据模型文件:
【User+CoreDataClass.swift】
【User+CoreDataProperties.swift】
现在依次修复出现的几个问题。点击右上角,打开检查器面板,
点击【显示数据模型检查器】图标,进入检查器面板
设置【Codegen】:Manul/None
点击左侧的【显示问题导航器图标】,显示应用程序编译错误列表。
需要清除由系自动生成的类文件。
选择错误文件所在的文件夹:/User/strengthen/Library/Developer/Xcode/DerivedData/
【Comamand】+【C】复制所选的内容
【Comamand】+【Tab】切换至已经打开的文件夹窗口
【Comamand】+【Shift】+【G】打开【前往文件夹】窗口
【Comamand】+【V】将复制的文件路径粘贴到弹出窗口的输入框。
->点击【前往】,跳转到指定的文件夹,该文件夹保存了所有在编译项目时所生成的缓存文件。
【Comamand】+【A】全选此处的所有文件夹。
【Comamand】+【Deleete】
可以清除此处的缓存,当再次编译项目时还会产生新的缓存文件。
对于大型项目来说,清除此处的缓存,下一次的编译会花费更多时间,以生成新的缓存。
关闭文件夹,并返回原来的开发界面。
依次点击菜单栏【Product】->【Build】->项目已经可以正常通过编译。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
选择开始编码,实现数据的持久化功能。
1 import UIKit 2 //引入数据持久化存储框架【CoreData】 3 import CoreData 4 5 class ViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 11 //获得当前程序的应用代理 12 let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate 13 //通过应用代理对象,获得管理对象上下文 14 let managedObjectContext = appDelegate.persistentContainer.viewContext 15 16 //通过管理对象上下文,插入一条实体数据 17 let newUser = NSEntityDescription.insertNewObject(forEntityName: "User", 18 into: managedObjectContext) as! User 19 20 //设置实体的用户名属性的内容 21 newUser.userName = "John" 22 //设置实体的密码属性的内容 23 newUser.password = "123456" 24 25 //添加一条异常捕捉语句,用于执行数据的插入操作 26 do 27 { 28 //使用try语句,执行管理对象上下文的存储操作,插入实体对象 29 try managedObjectContext.save() 30 //在控制台打印输出日志 31 print("Success to save data.") 32 } 33 catch 34 { 35 print("Failed to save data.") 36 } 37 } 38 }