以前都用SQlite3或者是plist來存儲使用者資料,然而最近公司買的代碼中用到了Core Data,于是開始研究。
功過學習,總結在工程項目中使用Core Data的基本步驟。
1. 必須在建立工程的時候,把Use Core Data勾選上;
2. 利用Xcode自帶建立資料模型的功能,建立你需要的model;
3. 初始化Core Data stack;
4. 向Core Data裡面添加儲存、讀取資料。
接下來分布講解每一步驟。
選擇在項目中使用Core Data
當你利用Xcode建立工程時,你會看到如下界面
這是在建立新工程的過程中,會彈出的供使用者設定項目的頁面,這個時候你就必須把Use Core Data勾選上,告訴Xcode你要在項目中使用Core Data。 如下圖:
利用Xcode建立資料模型
假設我們需要存儲的資料是一行字元串,并且帶有行号。比如說(1, "hello")、(2,"hi”)。然後在項目中選中projectName.xcdatamodeld這個檔案, 這個檔案是由于你在建立項目時選擇了Use Core Data後,Xcode自動幫你建立的。我這裡項目名稱設定成了CoreDataStudy, 是以我的這個檔案名稱時這樣子的。 如下圖:
點選Add Entity添加Line資料模型,你可以通過點選Editor Style在table和list視圖之間切換。 根據下圖的訓示,建立Line Entity。
1. 選中你通過點選Add Entity按鈕添加的Entity,然後按Enter鍵,改Entity的名稱為Line。 2. 點選箭頭所指的加号,為Line添加屬性。 3. 給該Entity要添加如圖所示的兩個屬性。
初始化Core Data stack
在Core Data stack初始化的過程中,會接觸到NSManagedObjectModel、NSPersistentStoreCoordinator、NSManagedObjectContext這幾個對象。結下來分别簡單介紹一下 它們的作用。當你在建立工程的時候選擇了Use Core Data後,Xcode會為你做好Core Data stack的初始化,不用你自己手動編寫任何代碼。
1. NSManagedObjectModel
是将第二步中建立的Entity與代碼聯系起來的對象。通過這個對象,代碼才能感覺到資料model對象是如何的一種存在(包括那些屬性等);
2. NSPersistentStoreCoordinator
從類等名稱就可以大體分析出來它的作用,它隻是一個存儲協助者,是以在這個類的建立過程中要給它傳入資料模型(就是上面建立的NSManagedObjectModel、最終資料儲存的路徑、還有使用何種方式存儲(有sqlite、xml、binary三種方式,這裡我們使用sqlite)。
3. NSManagedObjectContext
是資料操作的上下文,通過這個類可以讀取和寫入資料。該類的建立過程中需要把上面建立的NSPersistentStoreCoordinator作為參數傳入。
這些初始化代碼都是Xcode自動給你生成好了,不用自己手動去編寫。注意:iOS10 and MacOS 10.12這些初始化就變成一個NSPersistentContainer的初始化,不用涉及這麼多多對象的建立,同時利用NSPersistentContainer管理NSManagedObjectModel、NSPersistentStoreCoordinator、NSManagedObjectContext這三個對象,很友善。但是我們這裡還是采用比較繁瑣的建立三個對象的Core Data stack的初始化。 做Core Data stack的初始化的目的隻有一個,就是得到NSManagedObjectContext得到了這個對象,就可以對資料庫進行讀寫操作了。
向Core Data裡添加儲存、讀取資料
讀資料:在core data的context裡,通過NSFetchRequest來讀取資料。 寫資料:在core data的context裡,通過NSFetchRequest來讀取資料,如果沒有相應地資料對象,就建立一個,然後将指派後的對象儲存到context裡。 注:在NSFetchRequest裡可以添加NSPredicate來添加查詢限制。
相關Demo下載下傳位址
如果遇到不懂的了,歡迎留言提問~