2012-02-28 77 views
1

在我的應用程序我沒有任何問題保存/檢索字符串值(如myTextField.text)到NSUserDefaults,但無論我如何存儲NSDictionary我coldn't成功。我嘗試了很多來自這個網站+ Google的答案。任何人都可以幫忙嗎?這裏是我的代碼太:如何將NSDictionary存儲/檢索到NSUserDefaults?

id result=[NSJSONSerialization JSONObjectWithData:data options: 
       NSJSONReadingMutableContainers error:&error]; 
    NSLog(@"Result: %@", result); 


     NSDictionary *dict= [result objectForKey:@"message"]; 
    //i want to store dict sub dictionary 

* 編輯 *注:本詞典含有一種對象數組,而對象是屬性列表(的NSString,NSDate的,...)

的所有成員
+0

爲什麼你不能成功?有錯誤嗎? – JoePasq 2012-02-28 14:35:18

+0

@JoePasq不,沒有錯誤。當我嘗試檢索數據時,它只是返回空 – 2012-02-28 14:36:20

+0

你能看到我的編輯 – 2012-02-28 14:45:30

回答

3

其他答案試圖告訴你的是,你必須擺脫你的(id)。 NSUserDefaults和編譯器會發出抱怨並拋出警告,如果您嘗試將id設置爲用戶默認值。試試這種方式。

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

if (result) { 
    [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"yourUniqueKey"]; 
} 
+0

這正是答案 – 2012-02-28 15:25:32

2

這是因爲您的NSDictionary中的一些對象不是Objective C原始對象,或者說它是更好的方式,iOS不知道如何將NSDictionary中的自定義數據轉換爲可以保存和加載的表單再次。

所以你需要學習如何讓這些自定義對象符合NSCoding

Here is a related question that should have some useful information給你。

+0

該字典包含一種對象數組,對象是屬性列表的所有成員(NSString,NSDate,...) – 2012-02-28 14:40:18

1

這取決於你正在存儲什麼。蘋果documentation

NSUserDefaults類提供了方便的方法來訪問常見類型,如花車,雙打,整數,布爾和URL。默認對象必須是屬性列表,即(或用於收集實例組合的實例)屬性列表:NSData,NSString,NSNumber,NSDate,NSArrayNSDictionary。如果要存儲任何其他類型的對象,則通常應將其存檔以創建NSData的實例。有關更多詳細信息,請參閱Preferences and Settings Programming Guide

我假設你正試圖存儲除列出的類型以外的類型。

+0

什麼類型是'result'?我敢打賭,因爲它是'id'類型,NSUserDefaults在存儲它*時很笨拙,儘管它真的是一個有效的類型。 – JoePasq 2012-02-28 14:39:30

+0

請參閱我的編輯。結果本身是一個NSDictionary,並且包含NString和NSDate – 2012-02-28 14:50:40

+0

請參閱我之前對我的回答的評論。 :) – JoePasq 2012-02-28 15:42:46

相關問題