#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 中的資料
參考: