2010-10-11 17 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