如何将NSDictionary存储/检索到NSUserDefaults中



在我的应用程序中,我可以将字符串值(如myTextField.text)保存/检索到NSUserDefaults中,但无论我如何存储NSDictionary,我都不会成功。我尝试了很多来自这个网站+谷歌的答案。有人能帮忙吗?这也是我的代码:

id result=[NSJSONSerialization JSONObjectWithData:data options:
               NSJSONReadingMutableContainers error:&error];
    NSLog(@"Result: %@", result);

      NSDictionary *dict= [result objectForKey:@"message"];
    //i want to store dict sub dictionary 

*EDIT*注意:字典包含一种对象数组,对象都是属性列表(NSString、NSDate…)的成员

其他答案试图告诉你的是,你必须去掉你的(id)。如果您尝试将id放入用户默认值中,NSUserDefaults和编译器将抱怨并发出警告。这样试试吧。

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (result) {
   [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"yourUniqueKey"];
}

这是因为NSDictionary中的一些对象不是Objective C基元对象,或者说,iOS不知道如何将NSDictionary中的自定义数据转换为可以保存并再次加载的表单。

因此,您需要学习如何使这些自定义对象符合NSCoding

这里有一个相关的问题,应该有一些有用的信息给你。

这取决于您存储的内容。苹果公司的文件显示

NSUserDefaults类为访问常见类型(如浮点、双精度、整数、布尔值和URL)提供了方便的方法。默认对象必须是属性列表,即NSDataNSStringNSNumberNSDateNSArrayNSDictionary的实例(或集合的实例组合)。如果要存储任何其他类型的对象,通常应该将其归档以创建NSData的实例。有关更多详细信息,请参阅首选项和设置编程指南。

我认为您试图存储的类型不是列出的类型。

最新更新