這幾天想仔細的學習一下CoreData的部分,網(wǎng)絡(luò)上有很多的資料浪藻”芬辏看完之后把第一部分基礎(chǔ)重點用幾張圖表示,希望幫助別人能更快的理解卢厂。
1.什么是CoreData
Core Data本身既不是數(shù)據(jù)庫也不是數(shù)據(jù)庫訪問框架乾蓬,而是一個完整的數(shù)據(jù)模型解決方案∩骱悖可以理解為對持久層的封裝任内,使得我們可以通過可視化建立數(shù)據(jù)模型,不僅支持SQLite數(shù)據(jù)庫融柬,還能對XML文件死嗦、二進制文件、用戶自定義文件進行操作粒氧。
2.幾大重點屬性
其實之前說了CoreData是對持久層的一個封裝越走,以sqlite數(shù)據(jù)庫理解:
NSManagedObjectContext 是對數(shù)據(jù)庫數(shù)據(jù)操作的手柄,封裝了我們理解的增刪改查靠欢。需要注意的一點就是:在我們做任何操作的時候廊敌,其實都是把操作緩存在內(nèi)存中,直到我們調(diào)用save方法的時候门怪,才會映射到持久層骡澈。
NSManagedObjectModel類似于數(shù)據(jù)庫的輪廓,包括了數(shù)據(jù)庫內(nèi)部各個實體的定義信息掷空。
NSPresistentStoreCoordinator類似于數(shù)據(jù)庫的外部處理器肋殴,包括設(shè)置數(shù)據(jù)存儲的名字和位置囤锉,數(shù)據(jù)存儲的時機。
理解了三者都是做什么的护锤,都很好理解三者的創(chuàng)建順序:
3 可視化界面
創(chuàng)建一個實體
其中屬性里面type類型官地,從網(wǎng)上找到相關(guān)的資料:
Undefined: 默認值,參與編譯會報錯
Integer 16: 整數(shù)烙懦,表示范圍 -32768 ~ 32767
Integer 32: 整數(shù)驱入,表示范圍 -2147483648 ~ 2147483647
Integer 64: 整數(shù),表示范圍 –9223372036854775808 ~ 9223372036854775807
Float: 小數(shù)氯析,通過MAXFLOAT宏定義來看亏较,最大值用科學計數(shù)法表示是 0x1.fffffep+127f
Double: 小數(shù),小數(shù)位比Float更精確掩缓,表示范圍更大
String: 字符串雪情,用NSString表示
Boolean: 布爾值,用NSNumber表示
Date: 時間你辣,用NSDate表示
Binary Data: 二進制巡通,用NSData表示
Transformable: OC對象,用id表示舍哄”獯铮可以在創(chuàng)建托管對象類文件后,手動改為對應(yīng)的OC類名蠢熄。使用的前提是跪解,這個OC對象必須遵守并實現(xiàn)NSCoding協(xié)議
一個屬性的創(chuàng)建
4 注意點
1)對于一個創(chuàng)建的CoreData工程,里面有一個.xcdatamodeled模板文件签孔,在編譯之后會產(chǎn)生兩個文件:
一個放在document文件夾下的sqlite文件:
一個放在mainBundle路徑下的:
2)增刪改查
增:創(chuàng)建一個實體叉讥,然后交給context上下文處理:
刪改查:先找到你想要刪或改的實體,然后進行操作饥追,最后交給context上下文處理:
一定要在操作之后進行save操作图仓,不然所有的操作結(jié)果都只是在緩存中,沒有進入持久層:
我想這也是為什么我們在保存一個oc對象的時候但绕,需要該對象遵循NSCoding協(xié)議救崔。
3) 實體間的關(guān)系
兩個實體:Employee和Department
在創(chuàng)建的時候,有一個問題:
需要雙向設(shè)置嗎捏顺?
不需要六孵,當我設(shè)置了[department addEmployeeObject:employee];的時候,coredata會自動的實現(xiàn)下面的語句幅骄,最后employee.department的打印結(jié)果如下:
第一篇簡單的解釋了一下我理解的CoreData的基礎(chǔ)信息劫窒,想要了解更多的話可以參考: