1. 程式人生 > 實用技巧 >Core Data 學習筆記(一)框架簡介

Core Data 學習筆記(一)框架簡介

>>> hot3.png

目錄

零、前言

學習iOS開發已經有一段時間了,由於一直沒有系統的去從頭到尾的學,多半是到AppCoda上面找文章來看,所以當真正開始想要做一個小應用時,卻無從下手了。經過思考,感覺上應該是由於一直是看別人的教程,從頭到尾的跟下來,但是卻從來沒有針對具體的細節進行思考的原因。所以開始打算在iOS應用開發過程中遇到的技術要點都深入的學習一下,然後整理成筆記,發在部落格園、開源中國一個Github倉庫當中。發在開源中國是因為感覺開源中國的社交氛圍要好一些。至於單獨開一個Github倉庫,純粹是處於一種備份的目的。左右這兩個平臺都支援Markdown格式,所以也就沒所謂了。

筆記中所涉及的圖片,大都來自每篇筆記最下面的參考文章當中。我將參考文章分為了兩個類別,一個是在蘋果開發者庫中找到的教程,第二個是通過網際網路找到的各類部落格文章。

每篇筆記發表之後,我還會根據在實際使用中的新的發現以及在網路上看到的比較好的文章之後,整理出新的心得到對應的筆記當中。

一、簡單介紹

Core Data框架是用來管理資料在iOS應用當中的持久化操作的一種方式。其具有如下特性:

  • 變更追蹤及撤銷操作
  • 資料實體關係維護
  • 延遲載入
  • 自動屬性驗證
  • 模式遷移
  • 可選擇的與應用控制器層的整合以支援使用者互動的同步
  • 對鍵值對變成和監視提供完整的、自動的支援
  • 在記憶體和使用者介面中組合、過濾、組織資料
  • 額外資料倉庫的自動化支援
  • 查詢字串
  • 合併策略

注意:

  • Core Data不是一個數據庫管理系統(RDBMS),其只是一個用於操作資料的持久化框架
  • 使用Core Data,你仍然需要在真實的專案中編寫程式碼以操作資料
  • Core Data不依賴Cocoa繫結

二、基礎說明

2.1 基礎CoreData框架結構

從下圖可知,在CoreData框架中,我們首先要建立一個持久化資料庫物件用於持久化資料的儲存,需要一個持久化儲存協調器,用於處理持久化庫物件與被管理物件上下文之間的操作。然後需要一個持久化上下文物件,在持久化上下文當中,包含了各種需要持久化的實體。

輸入圖片說明

2.1.1 管理物件和上下文

持久化上下文(NSManagedObjectContext)

:當我們將資料從資料庫中提取出來後,將會放到持久化上下文當中,在持久化上下文中,我們可以對資料進行各種操作,但是這種操作在執行“儲存”之前,是不會影響到資料庫中的原有資料的。

被管理實體物件(NSManagedObject):資料模型物件在CoreData中被稱為“被管理物件”。所有的被管理物件都需要被放置到一個持久化上下文當中,這樣才能夠使用上下文對被管理物件進行插入、刪除、修改等各種操作。持久化上下文將會監視對被管理物件的各種修改,這樣持久化上下文才能夠對這些修改進行“撤銷”、“重做”以及“儲存”等操作。

當你決定將上下文中的所有改變都寫入資料庫時,CoreData將會檢測所有上下文中的資料物件的可用性,當所有的資料物件都可用時,將會將上下文中的修改都寫入到資料庫當中。

2.1.2 “資料提取”請求

為了使用持久化上下文從資料庫中提取資料,需要建立一個資料提取請求物件(NSFetchRequest),資料提取請求物件用於描述你需要從資料庫中提取怎樣的資料出來,類似於其他ORM框架的查詢條件。資料提取請求物件包含三個部分:想要操作的被管理實體物件名稱,條件格式字串(NSPredicate),條件陣列(鍵值對)。如下圖所示:

輸入圖片說明

將資料提取請求提交給持久化上下文,持久化上下文將從資料庫中提取出滿足資料提取請求的資料,作為被管理物件返回。提取返回的被管理物件將會自動加入接受請求的持久化上下文中,如果被提取的資料已經存在於持久化上下文當中,那麼直接從持久化上下文件中返回這些符合提取請求條件的資料物件。

2.1.3 持久化儲存協調器

持久化儲存協調器(NSPersistentStoreCoordinator)如下圖所示,是用於處理被管理物件上下文(一個或多個)與資料庫(一個或多個)之間操作的。換句話說,在CoreData框架中,如果說最上層為持久化上下文,最下層為資料庫的話,持久化儲存協調器就是處於框架的中間層。

持久化儲存協調器實際上是定義了一個棧。協調器被設計為供上下文訪問的一個“面”,協調器將整合多個數據庫,這樣在上下文物件看來,就只有一個“資料庫”存在。所有在上下文中處理的資料物件,都來自協調器,不論這些資料是否是來自一個真實的資料庫。所有在上下文中對資料物件的處理,都將有協調器自動針對各個資料庫進行處理。

輸入圖片說明

2.1.4 持久化儲存

持久化儲存(NSPersistentStore)是對某一個外部資料儲存資料庫檔案或其他資料庫在應用程式內的對映,以便可以使用持久化上下文進行操作。一般情況下,我們需要對一個持久化儲存例項操作的,僅僅是指定其外部資料資料庫的位置,其他的大部分有關資料持久化操作都是使用持久化上下文來進行的。

注意:

  • 雖然CoreData支援對SQLite的持久化管理,但是CoreData無法處理不是使用框架建立的SQLite資料庫,也就是說,CoreData只能處理和持久化自己建立的SQLite資料庫。

2.2 被管理物件與被管理物件模型

被管理物件模型(NSManagedObjectModel)提供用於描述被管理物件(NSManagedObject)綱要(Schema)。一般被管理物件模型可以使用"Xcode Data Model Design"工具建立。

被管理物件模型是一個實體描述物件的集合,每一個實體描述物件都是一個關於實體的元資料,包括實體名稱、在應用中使用的實體名稱(類例項變數/常量名)、實體屬性以及實體與其他實體的關係。如下圖所示:

輸入圖片說明

需要持久化的資料物件必須是NSManagedObject類的例項,或這個類的子類的例項。被管理物件類使用一個私有的內部儲存來維護屬性和實現被管理物件各種所需的基礎行為。一個被管理物件有一個到實體描述的索引。這個索引關聯到資料實體的元資料,包括實體名稱以及關於實體屬性和關係的描述資訊。

注意:

  • 可以建立NSManagedObject的子類來豐富被管理物件的行為。

參考

官方文件

網摘文章

轉載於:https://my.oschina.net/skyler/blog/483895