ios - 将 NSString 转换为 NSArray 并存储在 NSUserdefaults 中

标签 ios objective-c json nsarray nsuserdefaults

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

Attempt to set a non-property-list object

这是我正在使用的代码。我认为应该这么简单。我认为不必将对象实际转换为 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 命令输出):

[{"folder":"Documents","files":[{"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","bool_external":"0","url":null}]},{"folder":"Videos","files":[{"sort_order":"130","filename":"sample_video","filetype":"video","display_name":"Instructional Video","upload_date":"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].

作为引用,acceptable classes in plist files and NSUserDefaults是:

  • 数组(NSArray)
  • 字典(NSDictionary)
  • 字符串(NSString)
  • 数据(NSData)
  • 日期(NSDate)
  • 数值 [int32/64, float/double] (NSNumber)
  • bool 值(NSNumber)

键必须是字符串。

关于ios - 将 NSString 转换为 NSArray 并存储在 NSUserdefaults 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849424/

相关文章:

ios - 从远程服务器调用返回并评估错误对象时崩溃

iphone - 触摸时更改详细信息披露指示符图像

php - 在 Ajax 返回中获取 PHP 变量?

ios - 以编程方式设置文本时,不会触发 UITextField 委托(delegate)方法

ios - 如何查看 Swift 字典中存在的数组?

ios - 如何计算给定一系列数字的一些点

ios - 在 Objective C 中解析 JSON

objective-c - 在ios中进行持续方法更新的有效方法

java - 可以 http ://localhost:8080/tunnel-web/jsonws be opened on default installation?

java - 将 Java 库添加到 Android 项目