我正在尝试将NSDictionary
的数组值保存到NSUserDefaults
,但我遇到了一些奇怪的麻烦。
我的NSDictionary
NSStrings
keys
value
,NSArray
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}}持续存在。
这里有什么问题?控制台中没有警告或错误。
答案 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,解码存档中的数据并创建一组 等同于原始集合的对象。