CoreData入門

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

要使用持久化數據,我們有多種選擇:

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

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

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

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

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

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

二、Core Data托管對象

1.托管對象

托管對象是NSManagedObject實例,應用主要與之交互。可將托管對象視為字典,包含一組已知的鍵和對象類型(如字符串或數組)??梢韵裣旅孢@樣訪問托管對象的特性

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

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

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

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

[myMovie setMovieName:@"Casablanca"];

NSString *moviewName = [myMovie movieName];

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

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

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

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

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

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容