2010-10-11 20 views
-1

我有一個......奇怪的問題。與NSDictionary陣列不想保存到標準用戶默認設置

我正在添加NSDictionary到NSArray,然後將其保存爲默認值。當我檢查用戶默認值上的那個鍵的對象計數時,它說count是0,但「在內存中」的數組有這個對象(所以計數爲1)。

的代碼,它給出的輸出一起是這樣的:

(陣列是一個NSArray,默認是[NSUserDefaults的standardUserDefaults])

- (void)addSongToQueue:(NSDictionary *)songData { 
[array addObject:songData]; 
[defaults setObject:array forKey:@"OfflineArray"]; 
[defaults synchronize]; 

#if DEBUG 
NSLog(@"Dictionary Data Received: %@", songData); 
NSLog(@"Object Count on Array: %u", [array count]); 
NSLog(@"Object Count on Defaults: %u", [[NSArray arrayWithArray:[defaults objectForKey:@"OfflineArray"]] count]); 
[defaults removeObjectForKey:@"OfflineArray"]; 
[defaults synchronize]; 
#endif 
} 

這是我正在呼叫它:

[className addSongToQueue:[NSDictionary dictionaryWithObjectsAndKeys:@"yadda", @"yadda", nil]]; 

這是輸出:(我跑了兩遍,以確保公正:P)

2010-10-11 21:47:35.807 AppName[1119:207] Dictionary Data Received: { 
yadda = yadda; 
    } 

2010-10-11 21:47:35.807 AppName[1119:207] Object Count on Array: 1 
2010-10-11 21:47:35.808 AppName[1119:207] Object Count on Defaults: 0 
2010-10-11 21:47:36.647 AppName[1119:207] Dictionary Data Received: { 
yadda = yadda; 
    } 

2010-10-11 21:47:36.647 AppName[1119:207] Object Count on Array: 2 
2010-10-11 21:47:36.648 AppName[1119:207] Object Count on Defaults: 0 

所以是的。我無法解決它。 :/

在此先感謝。 :)

+0

看看這裏的一個可能的解決方案,你需要對對象進行編碼http://stackoverflow.com/questions/471830/why-nsuserdefaults-failed-to-save-nsmutabledictionary-in-iphone-sdk – 2010-10-11 21:00:08

回答

3

您確定defaults不是零?

+0

打賭就是這樣。如果你嘗試設置一個無效的對象,你會得到一個異常。 – Chuck 2010-10-11 23:03:26

+0

這的確是這樣,但發生這種情況是因爲我設置的函數默認= [NSUserDefaults standardUserDefaults];由於某種原因沒有運行。話雖如此,答案已被接受。謝謝! – MegaEduX 2010-10-12 21:55:43

1

你真的只是將NSString實例放入字典嗎?每次我從NSUserDefaults看到未完成保存時,都是因爲詞典中的某些對象與plist格式不兼容。您只能在plist格式的所有版本上存儲NSNumberNSStringNSArray,NSDictionary,NSData(某些還允許NSDate)。

+0

在真正的應用程序使用我正在保存NSString和NSNumbers,但正如你在這裏看到的,甚至保存與NSString字典不起作用。 – MegaEduX 2010-10-11 21:38:27