将NSString转换为NSArray并存储在NSUserdefault中



我有一个从服务器下载的字符串。它采用JSON格式,格式良好。它是一个JSON对象数组。我的目标是将其转换为NSArray,然后将其存储在NSUserDefaults中以供后续使用。我的尝试通常有效,但有时会出现以下错误:

尝试设置非属性列表对象

这是我正在使用的代码。我认为应该如此直截了当。我不认为必须实际将对象转换为NSDictionaries并对其进行迭代,是吗?

NSString *message = [dict objectForKey:@"message"];
NSLog(@"message: %@", message);
data = [message dataUsingEncoding:NSUTF8StringEncoding];
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:RESOURCES_LIST];

例如,这是导致其崩溃的字符串之一(由NSLog命令输出):

[{"文件夹":"文档","文件":[{"sort_order":"120","filename":"pdf.pdf","filetype":"pdf","display_name":"Instructions","upload_date":"2015-08-11","md5":"ea9f839f91941b5ea7f5a316e3ce95ca","bool_external":"0","url":"http://www.somesite.com/pdf.pdf"}]},{"folder":"Images","files":[{"sort_order":"100","filename":"space.jpg","filetype":"image","display_name":"example","upload_date":"2015-10-14","md5":"bc63b896949cbf87c54678fee8ed833b","bool_external":"0","url":"http://www.somesite.com/space.jpg"},{"sort_order":"110","filename":"profile.png","filetype":"image","display_name":"profile","upload_date":"2015-10-14","md5":"740d61911560e1c84869563b83f3bbf8","bool_external":"0","url":"http://www.somesite.com/profile.jpeg"}]},{"folder":"Info","files":[{"sort_order":"130","filename":"Info.pdf","filetype":"pdf","display_name":"Info","upload_date":"2015-11-17","md5":"926a7941cc9c7f58e43c3eb2de661c27",ideo","filetype":"video","display_name":"教学视频","上传日期":"2015-08-11","md5":"-1","bool_external":"0","url":"https://www.youtube.com/embed/PuNIwSsz7PI"}]}]

            "url": null

(在[2][@"files"][0]中)这很可能被解析为[NSNull null]的值,该值不能存储在NSUserDefaults中。您需要将服务器更改为空字符串发送或根本不发送,或者(递归)迭代并检查所有值,删除(或用@""替换)所有值为[NSNull null]的键。

作为参考,plist文件和NSUserDefaults中可接受的类为:

  • 阵列(NSArray)
  • 词典(NSDictionary)
  • 字符串(NSString)
  • 数据(NSData)
  • 日期(NSDate)
  • 数字[int32/64,浮点/双精度](NSNumber)
  • 布尔值(NSNumber)

键必须是字符串。

最新更新