2010-07-15 55 views
0

我有一個簡單的iPhone應用程序,它在啓動時訪問一些遠程數據,然後要求用戶選擇其中一個選項,但每次都會發生這種情況應用程序啓動,並且我希望應用程序在下次回憶該選擇時,如何使用Core Data持久保留此對象?什麼是在用戶的核心數據中存儲單個對象的最佳方式

我非常新的核心數據,我想它與增加一個對象到NSManagedObjectContext,但我不知道是否有一種方法來存儲一個對象對一個鍵或一些東西,以便我可以檢查是否它的然後很快被選定爲避免做遠程調用...

編輯

好吧,好像NSUserDefaults是去這裏的路,但我有一個小問題,我的自定義類是擴展NSManagedObject這我聽說在NSUserDefaults中存儲一個實例有點困難,所以我寫了一個小轉換器來獲取cl的每個屬性屁股,並把它放在NSUserDefaults不同的鍵下。

像這樣:

-(void)saveDeviceForUser:(Device*) device 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSData *encodedActive = [NSKeyedArchiver archivedDataWithRootObject:device.active]; 
    [defaults setObject:encodedActive forKey:@"UsersDevice_Active"]; 

    //and so on for each property of the Device object 
} 

然後我找回我以類似的方式對象:

-(Device*)loadDeviceForUser 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSData *encodedActive = [defaults objectForKey: @"UsersDevice_Active"]; 
    NSNumber* unarchivedActive = (NSNumber*)[NSKeyedUnarchiver unarchiveObjectWithData: encodedActive]; 

    Device *d = [[Device alloc] init]; 
    d.active = unarchivedActive; 

    return d; 
} 

但是,當我到上面的d.active = unarchivedActive行我得到一個錯誤:

由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [Device setActive:]:無法識別的選擇器已發送到實例0xac0be1 0'

我的類屬性是使用@dynamic而不是@synthesize設置的,所以我必須實現setter和getters才能使它工作嗎?會以任何方式擾亂核心數據嗎?

我希望是有道理的

乾杯, 馬克

+1

你的NSNumber對象* unarchivedActive,它可能需要是NSNumber * unarchivedActive – Kurbz 2010-07-15 13:18:32

+0

賓果!事實證明這裏有很多問題,並且已經遲到了......愚蠢的複製和粘貼錯誤!感謝幫助所有排序現在:) – Mark 2010-07-15 23:01:48

回答

3

我將存儲使用NSUserDefaults

當存儲自定義對象,必須正確archive

+0

另一個例子是使用自定義[NSMutableDictionary](http://stackoverflow.com/questions/1609305/updating-changing-settings-plist-files-with-new-versions-of - 應用程序) – tadman 2010-07-15 02:16:54

+0

** @ dylan **,謝謝我給出了一個去,讓你知道,但很快的問題,你是說要存儲在NSUserDefaults中的對象,我需要定義它如何被序列化? ** @ tadman **我需要通過應用程序運行持久化對象 – Mark 2010-07-15 02:40:31

+0

要將事物存儲在'NSUserDefaults'中,需要將它們分解爲「標準」對象,字符串,數字,日期,字典,數組等。或者,您需要把它變成二進制數據。將它存儲爲標準對象更容易。 – 2010-07-15 03:47:33

相關問題