我正在尝试保存一个NSDictionary
数组值到NSUserDefaults
但我遇到了一些奇怪的麻烦。
My NSDictionary
has NSStrings
for keys
和每个value
is a NSArray
of 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]);
当我创建处理此问题的类的新实例时,问题就出现了。当我创建该类的新实例并在 init 方法中检查NSDictionary
像这样:
NSLog(@"read initial: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
当我打印该日志记录时,NSDictionary
包含所有的keys但所有的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 开发人员文档 https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSKeyedArchiver_Class/Reference/Reference.html它说:
NSKeyedArchiver 是 NSCoder 的具体子类,提供了一种方法
将对象(和标量值)编码为与体系结构无关的
可以存储在文件中的格式。当您归档一组
对象,每个对象的类信息和实例变量
被写入档案。 NSKeyedArchiver 的同伴类,
NSKeyedUnarchiver,解码存档中的数据并创建一组
与原始集合等效的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)