shi*_*tix 3 objective-c nsdictionary nsuserdefaults nsarray ios
我试图保存一个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]);
Run Code Online (Sandbox Code Playgroud)
当我创建一个处理它的类的新实例时,问题就来了.当我创建类的新实例并在init方法中检查时,NSDictionary如下所示:
NSLog(@"read initial: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
Run Code Online (Sandbox Code Playgroud)
当我打印该日志记录时,它NSDictionary包含所有键,但所有键values现在都是空的!keys重新创建类后,所有新添加的都存在,但没有values持久化.
这可能有什么问题?控制台中没有警告或错误.
Suj*_*han 14
试试这个:
您可以使用NSKeyedArchiver将字典写入NSData,您可以将其存储在首选项中.
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.selectedOptionPositions];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:PREF_OPTIONS_KEY];
Run Code Online (Sandbox Code Playgroud)
用于检索数据:
NSData *dictionaryData = [defaults objectForKey:PREF_OPTIONS_KEY];
NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:dictionaryData];
Run Code Online (Sandbox Code Playgroud)
与在NSKeyedArchiver的iOS开发人员文档中一样,它说:
NSKey的具体子类NSKeyedArchiver提供了一种将对象(和标量值)编码为可以存储在文件中的独立于体系结构的格式的方法.归档一组对象时,每个对象的类信息和实例变量都将写入归档.NSKeyedArchiver的伴侣类NSKeyedUnarchiver对存档中的数据进行解码,并创建一组与原始集相当的对象.
| 归档时间: |
|
| 查看次数: |
7144 次 |
| 最近记录: |