fb-script

2016年9月1日 星期四

CoreData with swift 2 筆記 - 基礎概念

什麼是 CoreData

CoreData 是一個可以讓開發者在 App 內使用關聯式資料庫的框架

CoreData 結構

hierarchy iOSApp iOSApp ManagedObject ManagedObject iOSApp->ManagedObject ManagedObjectContext ManagedObjectContext ManagedObject->ManagedObjectContext PersistentStoreCoordinator PersistentStoreCoordinator ManagedObjectContext->PersistentStoreCoordinator PersistentObjectStore PersistentObjectStore PersistentStoreCoordinator->PersistentObjectStore ManagedObjectModel ManagedObjectModel PersistentStoreCoordinator->ManagedObjectModel DataFile DataFile PersistentObjectStore->DataFile SQLite SQLite PersistentObjectStore->SQLite XML XML PersistentObjectStore->XML
ManagedObject
單筆資料表紀錄 ORM 轉換後的物件型態,可以用 Object[欄位名稱] 來存取資料內容
ManagedObjectContext
CoreData資料的記憶體暫存區,存放資料庫中撈出來的資料,開發者異動的資料也會由此物件做第一層的管理,如果想要把記憶體中的資料寫入資料庫中,也是由此物件去和 PersistentObjectStore 做溝通
PersistentStoreCoordinator
此物件會將資料庫的紀錄撈出來和當前選擇的 data model 做 ORM 的動作,如果發現 data model id 有異動,則開發者要告訴此物件以何種方式做 migration
ManagedObjectModel
資料庫記錄進行 ORM 的 data model,此物件由 PersistentStoreCoordinator 讀取並將資料庫記錄轉為 ManagedObject
PersistentObjectStore
實際儲存資料到檔案的物件,儲存格式可以是 SQLite, XML 或 二進位檔

說白話一點,開發者會決定目前的 data model 長什麼樣子,然後 PersistentStoreCoordinator 會去讀取 data model 和 資料庫並產生一堆依照 data model 規劃的 ManagedObject 並存放在 MangedObjectContext 中,所以如果以開發者的角度來看,可以分成幾種狀況 :

新增資料
要先找到 ManagedObjectContext,然後告訴他要新增哪個資料表的資料,ManagedObjectContext 會回傳該資料表 ORM 後的 ManagedObject,對該 ManagedObject 做屬性(欄位)的設定後,再決定是否要儲存到資料庫中
修改資料
和新增資料相同,使用 ManagedObjectContext 撈出資料後直接對該 ManagedObject 做屬性的設定,再決定是否寫入到資料庫中
刪除資料
先找到 ManagedObjectContext,篩選出符合刪除條件的 ManagedObject,使用 ManagedObjectContext 刪除,再決定是否寫入到資料庫中

下一篇 CoreData創建

沒有留言:

張貼留言