2011-08-08 82 views
1

當用戶通過我的iPhone應用程序登錄時,我在NSUserDefaults中創建了一堆默認元素。其中之一是一個NSMutableArray,我添加下面的方法:存儲在NSUserDefaults中的NSMutableArray不會保存數據

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *theArray = [NSMutableArray array]; 
[prefs setObject:theArray forKey:@"theArray"]; 

這完美的作品。但是,當我想從theArray插入或檢索值時,出現了一些問題。下面是從另一個文件在我的應用程序的摘錄:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[[prefs objectForKey:@"theArray"] setValue:@"This is a value" forKey:@"aValue"]; 
NSLog(@"%@", [[prefs objectForKey:@"theArray"] valueForKey:@"aValue"]); 

我希望看到「這是一個值」在控制檯當代碼運行,而是我得到這個:

2011-08-08 18:35:17.503 MyApp[7993:10d03] (
) 

陣列如何是空的?我已經嘗試使用NSArray具有相同結果的相同的東西。

+0

不要忘記同步對NSUserDefaults所做的更改。請參閱:http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/synchronize –

+0

謝謝,沃爾夫岡。問題依然存在。 – wstr

回答

10

當您將可變對象存儲到NSUserDefaults時,它會存儲它的不可變副本,因此您無法直接像那樣更改它。您必須從默認值中獲取可變副本,將其更改,然後將其設置回來,以默認值替換舊對象。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy]; 
[mutableArrayCopy addObject:@"some new value"]; 
[prefs setObject:mutableArrayCopy forKey:@"theArray"]; 
[mutableArrayCopy release]; 
+0

當我按照你的建議(儘管用'setValue:forKey:'而不是'addObject'替換第三行),我仍然得到一個空數組。 – wstr

+4

你不能在NSMutableArray上執行'setValue:forKey:',你需要NSMutableDictionary,這就是爲什麼我在上面發佈的代碼中將它改爲'addObject:'的原因。 –

+0

該死,你說得對。我只是用一個NSMutableDictionary替換了NSMutableArray,而現在一切似乎都很美妙。謝謝! – wstr

0

的NSArray * savedArray = [NSArray的arrayWithObjects:@ 「OBJ1」,@ 「OBJ2」,@ 「OBJ3」,零]。
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:savedArray forKey:@「key_for_savedArray」];
[userDefaults synchronize];

//以檢索陣列使用:

的NSArray * retrivedArray = [userDefaults objectForKey:@ 「key_for_savedArray」];

相關問題