CoreData入門

一、判斷是否適合使用Core Data

要使用持久化數(shù)據(jù),我們有多種選擇:

1.NSUserDefaults: ? 這種方式通常用于保存應(yīng)用首選項.NSUserDefaults很像使用鍵值存儲的NSDictionary,可存儲用NSNumber、NSString、NSDate、NSData、NSDictionary或NSArray表示的值,還可以存儲任何遵守了NSCoding協(xié)議的對象。如果使用鍵值對、字典或數(shù)組可滿足應(yīng)用的持久化需求,就可使用NSUserDefaults。

2.keychain:對于應(yīng)用里存在對安全性要求的賬號密碼等數(shù)據(jù)可以存放在這里,由于keychain是獨立于APP的沙盒存放的,屬于系統(tǒng)級的存放,所以不會隨著應(yīng)用的刪除而刪除。(這里有一篇簡單使用的例子http://www.itdecent.cn/p/9188235eedab

3.屬性列表(plist):NSDictionary和NSArray都支持讀寫用戶定義的屬性列表文件,這種文件采用XML格式,可存儲NSNumber、NSString、NSDate、NSData、NSDictionary和NSArray。如果使用字典或數(shù)組可滿足應(yīng)用的持久化需求,就可使用屬性列表文件。

4.編碼器(Coder)和鍵式歸檔(Key Archive):NSCoder和NSKeyedArchiver支持將任何對象存儲到二進制文件中。要使用這種持久化方式,要存儲的每個自定義對象都必須實現(xiàn)NSCoder定義的方法,而開發(fā)人員必須負責(zé)保存和加載。如果只需幾個自定義對象就能滿足應(yīng)用的持久化需求,就可使用這種方式。

5.直接使用SQLite:應(yīng)用可使用C語言庫libsqlite直接與SQLite數(shù)據(jù)庫交互。SQLite是一種嵌入式關(guān)系數(shù)據(jù)庫,不需要服務(wù)器,支持SQL92描述的大部分標準SQL語言。在iOS應(yīng)用中,使用SQLite可實現(xiàn)SQL支持的任何數(shù)據(jù)持久化邏輯,如定義數(shù)據(jù)庫表和關(guān)系、插入數(shù)據(jù)、查詢數(shù)據(jù)以及更新和刪除數(shù)據(jù)。這種方式的缺點是,應(yīng)用需要在對象和SQL之間建立映射,需要編寫檢索和保存數(shù)據(jù)的SQL查詢,還需要編寫代碼來跟蹤需要保存的對象。

6.Core Data:提供了直接使用SQLite的大部分靈活性,同時應(yīng)用無需關(guān)系數(shù)據(jù)庫使用機制。如果應(yīng)用需要的數(shù)據(jù)很多、需要維護對象之間的關(guān)系或需要快速和輕松地訪問特定對象,Core Data可能是不錯的選擇。

二、Core Data托管對象

1.托管對象

托管對象是NSManagedObject實例,應(yīng)用主要與之交互??蓪⑼泄軐ο笠暈樽值洌唤M已知的鍵和對象類型(如字符串或數(shù)組)??梢韵裣旅孢@樣訪問托管對象的特性

NSString *movieName = [myMOview valueForKey:@"movieName"];

要更新特性,可使用setValue:forKey.

[myMovie setValue:@"Casablanca" forkey:@"movieName"];

可將托管對象定義為NSManagedObject的子類,這樣就可以像訪問屬性那樣訪問特性.

[myMovie setMovieName:@"Casablanca"];

NSString *moviewName = [myMovie movieName];

NSManagedObject子類可包含自定義方法.例如,在存儲電影信息的托管對象中,可添加一個自定義方法,用于跟蹤電影被欣賞了多少次.這個方法可能將電影的"欣賞次數(shù)"特性加1,并將"最后欣賞日期"設(shè)置為當天.

可在托管對象之間建立關(guān)系.例如,在跟蹤電影收藏的應(yīng)用中,跟蹤電影是否借給了朋友可能很有用.為此,可在應(yīng)用中創(chuàng)建Movie和Friend對象,并在它們之間建立關(guān)系.

對象之間的關(guān)系可以是一對一的.如果電影應(yīng)用將每一部電影的海報圖像都存儲在一個獨立的對象中,就可以在電影和海報圖像之間建立一對一的關(guān)系.

[myMovie setValue:posterImageObject forKey:@"posterImage"];

NSManagedObject *movie = [posterImageObject valueForKey"@"relatedMovie"];

關(guān)系也可以是一對多的.例如,一部電影不能同時借給多位朋友,但一位朋友可同時借用多部電影.

[myMovie setValue:myFriend forKey:@"lentToFriend"];

[myOtherMovie setValue:myFriend forKey"@"lentToFriend"];

NSSet *borrowedMovies = [myFriend valueForKey"@"borrowedMovies"];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容