iOS NSDictionary保存到NSUserDefaults而不保存值
我试图将带有数组值的NSDictionary
保存到NSUserDefaults
但是遇到了一些奇怪的麻烦。
我的NSDictionary
有keys
NSStrings
,每个value
都是NSNumbers
的NSArray
。 当我打印出字典时,一切都很好。 我把这本字典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对存档中的数据进行解码,并创建一组与原始集相当的对象。