iOS NSDictionary保存到NSUserDefaults而不保存值

我试图将带有数组值的NSDictionary保存到NSUserDefaults但是遇到了一些奇怪的麻烦。

我的NSDictionarykeys NSStrings ,每个value都是NSNumbersNSArray 。 当我打印出字典时,一切都很好。 我把这本字典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]); 

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

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

当我打印该日志记录时, NSDictionary包含所有键,但所有values现在都是空的! 重新创建类后,所有新添加的keys存在,但没有values保持不变。

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

尝试这个:

您可以使用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]; 

与在NSKeyedArchiver的iOS开发人员文档中一样,它说:

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