有很多關(guān)于CoreData的文章跷究,本文簡(jiǎn)單的介紹在應(yīng)用中集成和利用CoreData需要的組件以及CoreData的基本功能胎撤,以幫助你判斷和在應(yīng)用中使用CoreData是否是合適的選擇默穴。
- 1:關(guān)于CoreData提供的一些功能
a:使用可視化模型編輯進(jìn)行數(shù)據(jù)對(duì)象建模
b:處理對(duì)象架構(gòu)變更的自動(dòng)和手動(dòng)遷移工具
c:在對(duì)象之間建立一對(duì)一,一對(duì)多,多對(duì)多等關(guān)系
d:以不同的格式將數(shù)據(jù)存儲(chǔ)到肚里的文件中
e:對(duì)象特性驗(yàn)證
f:數(shù)據(jù)查詢和排序
g:延遲加載和排序
h:與iOS表視圖緊密協(xié)作
i:使用提交和撤銷(xiāo)功能管理相關(guān)的對(duì)象變更
- 2
要使用持久化數(shù)據(jù),iOS開(kāi)發(fā)人員有多種選擇
NSUserDefault
這種方式通常用于保存應(yīng)用的首選項(xiàng)剧蚣,NSUserDefault很像使用鍵值存儲(chǔ)的NSDictionary,可存儲(chǔ)NSNumber,NSString,NSDate,NSData,以及
NSDictionary或者NSArray表示的值旋廷,還可以存儲(chǔ)任何遵循了NSCoding的對(duì)象鸠按。如果使用鍵值對(duì),字典或者數(shù)字可以瞞住應(yīng)用的持久化需求饶碘,就可以使用NSUserfault.
屬性列表(plist)
NSDictionary和NSArray都支持讀寫(xiě)用戶的屬性列表文件待诅,這種文件采用XML格式,可存儲(chǔ)NSNumber熊镣,NSString,NSDate,NSData,NSDictionary或者NSArray。如果使用字典或者數(shù)組可以瞞住應(yīng)用的需求募书,可以用屬性列表文件
編碼器(Coder)和鍵式歸檔(Keyed Archive)
NSCoder和NSKeyedAricher支持將任何對(duì)象圖存儲(chǔ)到二進(jìn)制文件中绪囱,要使用這種持久化方式,要存儲(chǔ)的每個(gè)自定義對(duì)象都必須實(shí)現(xiàn)NSCoder定義的方法莹捡,而開(kāi)發(fā)人員必須負(fù)責(zé)保存和加載鬼吵。如果只需要幾個(gè)自定義對(duì)象就能瞞住應(yīng)用的持久化需求,就可以使用這種方式篮赢。
直接使用SQLite
應(yīng)用可使用c語(yǔ)言的庫(kù)libsqlite直接和SQLite數(shù)據(jù)庫(kù)交互齿椅。SQLite是一種嵌入式關(guān)系數(shù)據(jù)庫(kù),不需要服務(wù)器启泣,支持SQL92描述的大部分標(biāo)準(zhǔn)的SQL語(yǔ)言涣脚。在iOS應(yīng)用中,使用SQLite可實(shí)現(xiàn)SQL支持的人和數(shù)據(jù)持久化邏輯寥茫,如定義數(shù)據(jù)表和關(guān)系遣蚀,插入數(shù)據(jù),查詢數(shù)據(jù)以及更新和刪除數(shù)據(jù)纱耻。這種方式的缺點(diǎn)是芭梯,應(yīng)用需要在對(duì)象和SQL文件之間建立映射,需要便攜檢索和保存數(shù)據(jù)的SQL查詢弄喘,還需要編寫(xiě)代碼來(lái)跟蹤需要保存的對(duì)象玖喘。
CoreData
提供了直接使用SQLite的大部分靈活性,同時(shí)應(yīng)用無(wú)需關(guān)心數(shù)據(jù)庫(kù)使用機(jī)制蘑志。如果應(yīng)用需要的數(shù)據(jù)很多累奈,需要維護(hù)對(duì)象之間的關(guān)系或需要快速而輕松的訪問(wèn)特定對(duì)象贬派,CoreData可能是不錯(cuò)的選擇。
3 CoreData托管對(duì)象
CoreData的托管對(duì)象是什么费尽?如果在CoreData的托管對(duì)象模型中定義它門(mén)赠群,應(yīng)用如果與托管對(duì)象交互,以及在托管對(duì)象的定義發(fā)生變法的時(shí)候如何應(yīng)付旱幼。
ps:托管對(duì)象是NSManagedObject實(shí)例查描,應(yīng)用主要與之交互“芈保可以將托管對(duì)象視為字典冬三,包含一組已知的鍵和對(duì)象類型(如字符串或者數(shù)組)≡蹈浚可以像下面這樣訪問(wèn)托管對(duì)象的特性勾笆。
NSString *movieName = [myMovie valueForkey:@"movieName"];
要更新新特性,可使用setValue:forKey.
[myMovie setValue:@"Casablance" forKey:@"movieName"];
可以將托管對(duì)象定義為
NSManagedObject的子類桥滨,這樣就可像訪問(wèn)屬性那樣訪問(wèn)特性窝爪。
[myMovie setMovieName:@"Casablance"];
NSString *movieName = [myMovie movieName];
NSManagedObject子類可包含自定義方法。列如齐媒,在存儲(chǔ)電影信息的托管對(duì)象中蒲每,可以添加一個(gè)自定義方法,用于跟中電源被欣賞了多少次喻括。這個(gè)方法可能將蕩漾的“看”的特性加1邀杏,并將“最后看的時(shí)間”設(shè)置為當(dāng)天。
可是在托管對(duì)象之間建立關(guān)系唬血。列如望蜡,在跟蹤電源收藏的應(yīng)用中,跟蹤電影票是否借給了朋友拷恨,為此脖律,我們可以在應(yīng)用中創(chuàng)建Movie和Friend對(duì)象,并且在他們之間建立關(guān)系腕侄。
對(duì)象之間的關(guān)系可以是一對(duì)一的状您,如果電影應(yīng)用獎(jiǎng)每部電影的海報(bào)圖像都存儲(chǔ)在一個(gè)獨(dú)立的對(duì)象中,就可以在電影和海報(bào)圖像之間建立一對(duì)一的關(guān)系兜挨。
[myMovie setValue:posterImageObject forKey:@"posterImage"];
NSManagedObject *movie = [posterImageObject valueForKey:@"relaterMovie"];
關(guān)系也可以是一對(duì)多的膏孟,列如,一部電影不能同時(shí)借給多位朋友拌汇,但是一位朋友是可以同時(shí)借用多部電影的柒桑。
[myMovie setValue:posterImageObject forKey:@"posterImage"];
NSManagedObject *movie = [posterImageObject valueForKey:@"relaterMovie"];
[myMovie setValue:@"myFriend" forKey:@"lentToFriend"];
[myOther setValue:myFriend forKey:@"lentToFriend"];
NSSet *borrowedMovies = [myFriend valueForKey:@"borrowedMovies"];
托管對(duì)象模型
托管對(duì)象是在托管對(duì)象模型(NSManagedObjectModel)中定義的。托管對(duì)象模型包涵一系列實(shí)體噪舀,實(shí)體的特性魁淳,特性和實(shí)體的有效性約束一集實(shí)體之間的關(guān)系飘诗。托管對(duì)象模型通常是實(shí)用Xcode可視化模型編輯起創(chuàng)建的
還沒(méi)結(jié)束……