[Xcode10 實際操作]七、檔案與資料-(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 }