我有一个从服务器下载的字符串。它采用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&#34 ;,"文件名":" pdf.pdf""对文件类型":" PDF"" DISPLAY_NAME":& #34;说明"" UPLOAD_DATE":" 2015年8月11日"" MD5":" ea9f839f91941b5ea7f5a316e3ce95ca"&# 34; bool_external":" 0"" URL":" HTTP://www.somesite.com/pdf.pdf"}]},{ "夹":"图像""文件":[{" SORT_ORDER":" 100"&#34 ;文件名":" space.jpg""对文件类型":"图像"" DISPLAY_NAME":"示例&# 34;," UPLOAD_DATE":" 2015年10月14日"" MD5":" bc63b896949cbf87c54678fee8ed833b"" bool_external&#34 ;:" 0"" URL":" HTTP://www.somesite.com/space.jpg"},{" SORT_ORDER&#34 ;:" 110""文件名":" profile.png""对文件类型":"图像",& #34; DISPLAY_NAME":"简介"" UPLOAD_DATE":"二○一五年十月十四日&#34 ;, " MD5":" 740d61911560e1c84869563b83f3bbf8"" bool_external":" 0"" URL":" HTTP ://www.somesite.com/profile.jpeg"}]},{"夹":"信息""文件&#34 ;: [{& #34; SORT_ORDER":" 130""文件名":"访问3D""对文件类型":" PDF"" DISPLAY_NAME":"信息"" UPLOAD_DATE":" 2015年11月17日"" MD5& #34;:" 926a7941cc9c7f58e43c3eb2de661c27"" bool_external":" 0"" URL":空}]},{"夹":"画""文件":[{" SORT_ORDER":" 130""文件名&#34 ;:" sample_video""对文件类型":"视频"" DISPLAY_NAME":"教学 视频"" UPLOAD_DATE":" 2015年8月11日"" MD5":" -1"" bool_external":" 0"" URL":" HTTPS://www.youtube.com/embed/PuNIwSsz7PI"}]}]
答案 0 :(得分:1)
"url": null
(在[2][@"files"][0]
中)
这很可能被解析为[NSNull null]
的值,无法存储在NSUserDefaults
中。您需要更改服务器以作为空字符串发送或根本不发送,或者(递归地)迭代并检查所有值,删除(或替换为@""
)所有值为[NSNull null]
的键。
作为参考,acceptable classes in plist files and NSUserDefaults
是:
键必须是字符串。