iOS NSDictionary保存到NSUserDefaults而不保存值

时间:2014-03-19 09:53:28

标签: ios objective-c nsarray nsdictionary nsuserdefaults

我正在尝试将NSDictionary的数组值保存到NSUserDefaults,但我遇到了一些奇怪的麻烦。

我的NSDictionary NSStrings keys valueNSArray NSNumbers NSUserDefaults [[NSUserDefaults standardUserDefaults] setObject:self.selectedOptionPositions forKey:PREF_OPTIONS_KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; //THIS PRINT EVERYTHING OUT EXACTLY AS IT SHOULD! NSLog(@"read after write: %@", [[NSUserDefaults standardUserDefaults] objectForKey:PREF_OPTIONS_KEY]); 。当我打印字典时,一切都很好。我把这本字典写到NSDictionary,如果我马上把它读出去,一切都很好。使用这一切都很好:

NSLog(@"read initial: %@", [[NSUserDefaults standardUserDefaults] 
                              objectForKey:PREF_OPTIONS_KEY]);

当我创建一个处理它的类的新实例时,问题就来了。当我创建类的新实例时,在init方法中检查NSDictionary,如下所示:

values

当我打印该日志记录时,keys包含所有,但所有values现在都是空的!重新创建课程后,所有新添加的{{1}}都存在,但没有{{1}}持续存在。

这里有什么问题?控制台中没有警告或错误。

1 个答案:

答案 0 :(得分:14)

试试这个:

您可以使用NSKeyedArchiver将您的字典写入NSData,您可以将其存储在首选项中。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.selectedOptionPositions];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:PREF_OPTIONS_KEY];

用于检索数据:

NSData *dictionaryData = [defaults objectForKey:PREF_OPTIONS_KEY];
NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:dictionaryData];

正如在iOS Developer Documentation for NSKeyedArchiver中所说:

   NSKey的一个具体子类NSKeyedArchiver提供了一种方法   将对象(和标量值)编码为独立于体系结构   可以存储在文件中的格式。归档一组时   对象,每个对象的类信息和实例变量   被写入档案。 NSKeyedArchiver的伴侣班,   NSKeyedUnarchiver,解码存档中的数据并创建一组   等同于原始集合的对象。