1. 程式人生 > >[Xcode10 實際操作]七、檔案與資料-(11)資料持久化儲存框架CoreData的使用:建立CoreData實體並插入資料

[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 }