Magical Record是什么
? ? ?在Cocoa中存在一種技術(shù)叫Core Data,用來(lái)對(duì)數(shù)據(jù)進(jìn)行持久化,類(lèi)似于Java世界中的Hibernate。在新建Cocoa Application/iOS Application的向?qū)е校幸粋€(gè)選項(xiàng)是要不要使用Core Data,當(dāng)啟用以后你會(huì)發(fā)現(xiàn)在AppDelegate.m中添加了大量與Core Data相關(guān)的代碼,但是你對(duì)大部分代碼不知所以然。
Magical Record的出現(xiàn)在一定程度上緩解了這個(gè)問(wèn)題,降低了Core Data的使用門(mén)檻。Magical Record借用了Ruby on Rails中的Active Record模式,使得你可以非常容易的添加、查找、刪除數(shù)據(jù)。Google了一下,沒(méi)有發(fā)現(xiàn)中文相關(guān)教程,遂把自己的試用過(guò)程記錄下來(lái),寫(xiě)成此篇文章。
安裝
新建一個(gè)項(xiàng)目,注意在向?qū)е胁灰催xCore Data。
下載Magical Record,并把MagicalRecord目錄拖拽到工程中,記得勾選copy items into group folder。
為項(xiàng)目添加CoreData FrameWork。(點(diǎn)擊工程根節(jié)點(diǎn),然后依次Targets > Build Phases > Link Binary With Libraries > + > CoreData.framework > Add)。
添加Magical Record的頭文件到*-Prefix.pch:
#import "CoreData+MagicalRecord.h"
創(chuàng)建模型文件
下面創(chuàng)建一個(gè)名為Person的模型,有age、firstname、lastname三個(gè)字段。
創(chuàng)建一個(gè)名為Model的模型文件。 (File > New File… > Core Data > Data Model)
點(diǎn)擊左下角的Add Entity,更改Entity的名字為Person。
為Entity添加三個(gè)Attribute:age(Integer16)、firstname(string)、lastname(string)。
點(diǎn)擊Editor > Create NSManagedObject Subclass… > Create創(chuàng)建模型文件對(duì)應(yīng)的類(lèi)。
使用Magical Record
初始化Magical Record
首先在AppDelegate.m中添加以下代碼對(duì)Magical Record進(jìn)行初始化:
查詢(xún)記錄
使用Person的MR_findAll、MR_findAllSortedBy、MR_findByAttribute等方法可以查詢(xún)Person:
添加記錄
使用Person的MR_createEntity方法可以方便的創(chuàng)建一個(gè)Person,需要使用[[NSManagedObjectContext MR_defaultContext] MR_save]來(lái)進(jìn)行保存哦:
更新記錄
直接對(duì)數(shù)據(jù)庫(kù)中查找到的Person進(jìn)行賦值,然后使用NSManagedObjectContext保存即可更新Person
刪除記錄
使用Person的MR_deleteEntity可以方便的刪除Person,模式和添加更新一致:
小技巧
啟動(dòng)時(shí)MR_mergedObjectModelFromMainBundle方法報(bào)錯(cuò)
Core Data的模型有版本的概念,有可能在你Magical Record第一次初始化完成以后,你又更改了模型文件,導(dǎo)致Core Data去合并模型報(bào)錯(cuò)。解決辦法很簡(jiǎn)單,點(diǎn)擊菜單中的Project->Clean即可。
項(xiàng)目使用ARC后,編譯Magical Record不通過(guò)
點(diǎn)擊項(xiàng)目 -> Build Phases -> Compile Sources中, 雙擊報(bào)錯(cuò)的class文件, 編輯Compiler Flags加入 -fno-objc-arc。
不想使用MR_前綴
只需要在*-Prefix.pch文件中添加一句#define MR_SHORTHAND即可,注意這句要在#import “CoreData+MagicalRecord.h”之前。