#19 Core Data 練習 | 儲存聯絡人資料

使用功能

Core Data 新增
讀取
修改
刪除

功能介紹

首先在建立專案時,要將 core data 選項打勾,系統就會自動在AppDelegate.swift 產生 Core Data 程式碼

建立好專案後,點擊左方 .xcdatamodeld 檔,建立 Entity 與要儲存的項目,並設定其型別

在編輯程式前,記得插入 Core Data 套件

Core Data 新增資料

點擊右上角+按鈕後,present modally 到編輯頁,結束編輯按完成後,儲存一筆新的資料到 core data

在 Controller 中有先宣告一個變數可以直接取用 AppDelegate 裡的物件

let appDelegate = UIApplication.shared.delegate as! AppDelegate

而 persistentContainer 在專案建立時,系統已自動定義,所以可以直接拿來用,據官方文章 NSPersistenContainer 可以同時管理 Model, Context, Store Coordinator

儲存資料直接取用系統在 AppDelegate 定義好的 function

Core Data 讀取資料

按下完成鍵後,利用 unwind segue 回到前一頁,在這之前會先跑第二頁 prepare 的 function,新增資料與修改資料的 function 都放在此處,由於不管是儲存資料還是修改資料都需要經過此 prepare,因此需要判斷是新增資料要做的動作還是修改資料做的動作(文章後面會再做更詳細解說如何判斷

回到前頁後,讀取 core data 資料,將抓到的資料存在宣告為 [Directory]的變數 directories 中,並更新 table view 的顯示畫面

讀取資料的 function 如下

Core Data 修改資料

點擊 table view cell 可以進去編輯,利用 SegueAction 跳到編輯頁,並將點擊到 cell 的資料傳到編輯頁並顯示

修改資料本來就有原本的 Dictionary ,因此不需要再重新產生,直接修改內容後,再利用 saveContext() 儲存

完成後按下 Done 按鍵,跟新增資料一樣會先跑 prepare 的 function,因為是用 unwind segue 回到前頁

至於如何辨別新增一筆資料還是修改資料的方式,我在編輯頁面宣告了一個 Bool 的變數 result,如果是編輯資料時,點擊 cell 會觸發 SegueAction,此時在 SegueAction 的 function 中就會傳 true 給編輯頁的變數 result,因此在 prepare 中如果 result 是 true,及觸發 function updateData()(更新資料),其他則新增資料

Core Data 刪除資料

將 Table View 中內建的 canEditRowAt 和 editingStyle 標註解開(data source)

canEditRowAt 回傳 true 後就可以出現左滑刪除的按鍵

下方的 function 則為設定刪除後要做的動作

先讀取 core data 中的資料

var requests = try context!.fetch(Directory.fetchRequest())

確認要刪除的資料後使用

context.delete()

刪除 core data 中的資料

參考:

--

--