iOS 5.0之后蘋果公司為iOS開發人員提供了一個框架,那就是CoreData框架(注意,CoreData只是個框架,并不是數據庫)。CoreData最大的優點就是可以將普通的數據當成對象來操作,而不必去在意數據在磁盤上的存儲方式,并且CoreData可以合理的管理內存,使用起來更加高效。
1.CoreData中的關鍵類
NSManagedObjectModel(被管理的對象模型)
數據庫所有表格或數據結構,包含各實體的定義信息
作用:添加實體的屬性,建立屬性之間的關系
操作方法:視圖編輯器,或代碼
NSManagedObjectContext(被管理的對象上下文)
操作實際內容(操作持久層)
作用:插入,更新,查詢,刪除數據
NSManagedObject(被管理的數據對象)
相當于數據庫中的一條記錄
NSPersistentStoreCoordinator(持久化存儲協調器)
相當于數據庫的連接器
作用:設置數據存儲的名字,位置,存儲方式,和存儲時機
NSFetchRequest(獲取數據的請求)
相當于數據庫的查詢語句
NSPredicate(謂詞)
查詢數據的過濾條件
NSEntityDescription(實體描述)
對實體結構的描述
2.模型文件
CoreData給我們提供了對象 — 關系映射功能,可以將對象模型轉成關系模型,也就是把OC中的對象轉化成數據庫中的數據,同時也可以將數據庫中的數據還原成OC中的對象。CoreData將需要進行映射的對象稱作實體(Entity),每個實體都可以擁有許多屬性(Attributes),不同的實體之間還可以擁有一些關聯關系(Relationships)。而這一切都建立在模型文件的基礎上的。
建立模板
如果你是新建的一個工程,那么你可以在新建工程的時候勾選Use Core Data選項:
創建實體
添加一個Husband實體,設置一個屬性name,類型為String:
建立關聯關系
添加一個Wife實體,設置一個基本屬性name,再設置一個關聯屬性husband,類型為Husband:
回到Husband實體,添加關聯屬性wife,類型為Wife,Inverse屬性設置為husband:
Husband實體勾選了Inverse屬性后,Wife實體中的husband屬性會自動關聯,這時候就建立了一對一的關聯關系:
創建完關聯關系之后我們可以切換到圖形界面去看看我們創建的實體模型:
3.創建NSManagedObject的子類
在默認情況下,實體的數據類型都是NSManagedObject類型的,可以通過鍵值編碼的方式存取數據。這樣存取稍顯麻煩,而且在項目中可能不滿足于數據的存取,還會需要添加一些業務方法去處理其他的任務,這個時候就需要創建NSManagedObject的子類了。
創建完成后我們可以發現工程里多出幾個類:
可以看到以我們設置的實體名命名的類是繼承于NSManagedObject類的:
在最早期版本的iOS中實體的屬性也是存在于上面的類中的(當時只有實體名命名的類),現階段實體的屬性都放在實體類的分類當中:
在.m文件中可以發現屬性不是用常見的@synthesize修飾,而是@dynamic,這表示我們不能自己定義setter方法和getter方法,其getter和setter方法會在程序運行的時候或者用其他方式動態綁定。