2012-03-30 187 views
40

我有一個的NSMutableDictionary,我已經添加值到它(幾個密鑰對值)。現在我需要將此NSMutableDictionary保存到NSUserDefaults對象。保存的NSDictionary到NSUserDefaults的

1.)我代碼如下:我不知道它是否正確,我還需要知道如何從NSUSerDefault中檢索NSMutableDictionary?

2)檢索的NSMutableDictionary後,我需要把它保存到一個NSDictionary中。我怎麼能做到這些?

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

您還需要調用'[[NSUserDefaults的standardDefaults]同步]'保存。你究竟在爲什麼而掙扎?你提到了你想要做的事情,但不是你遇到問題的地方。上面包含的代碼(除了缺少'[')看起來沒問題。 – Sam 2012-03-30 17:07:20

+0

我需要保存一些鍵值對並從不同的視圖進行訪問。所以我想使用NSUserDefaults和NSDictionary。最後,我將不得不用這些值填充表格。 – shajem 2012-03-30 17:30:57

+0

除非你添加更多的細節,否則我懷疑你會得到更多的答案。你正在設置的東西很好。當你調用'[[[NSUserDefaults standardDefaults] objectForKey:@「DicKey」]'時,你沒有找到字典嗎?請注意,這將是一個'NSDictionary *'類型,而不是'NSMutableDictionary *'。如果要跨視圖操作數據,請考慮將數據存儲在傳遞給兩個視圖的數據模型中(或根據數據的通用/可見程度,在其上提供單例訪問器)。 – Sam 2012-03-30 17:44:25

回答

74

你的代碼是正確的,但你必須記住的一件事是,NSUserDefaults不可變和不可變對象區分,所以當你把它找回來,它會是一成不變的:

NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

如果你想有一個可變的字典,只需要使用mutableCopy

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

記住,使用'copy'你保留對象,所以你將成爲所有者,你將負責釋放它。 – Saphrosit 2012-03-30 16:48:45

+22

手動管理內存就像,無論如何。 – yuji 2012-03-30 16:53:20

+2

我正在使用ARC。而且,我需要將NSMutableDictionary保存爲NSUser默認值,並從NSUserDefaults中獲取NSDictionary。所以我必須使用你的第一種方法,我猜? – shajem 2012-03-30 16:55:12

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

這是你的預期。