【问题标题】:storing [NSNull null] values in NSUserDefaults, from JSON serialization, causes unwanted exceptions从 JSON 序列化中将 [NSNull null] 值存储在 NSUserDefaults 中会导致不需要的异常
【发布时间】:2014-10-08 14:23:35
【问题描述】:

我有一个使用基于 JSON 的 API 的应用程序。作为 JSON 的一部分,通常将值设置为“null”。这可能很常见:

{"data":["one","two","three"],"name":null,otherstuff:10}

最近我尝试在 NSUserDefaults 中存储从 JSON 对象转换而来的杂项 NSDictionary 层次结构。不幸的是,如果有空数据,它会导致异常,在 IOS 中转换为 [NSNull null]。显然这不能保存在首选项中。

我想知道是否有人以前解决过这个问题?我尝试添加一些逻辑以首先从 JSON 中删除所有空值,但成功有限,但在存储数据之前必须修改数据似乎不合适。有没有更好的方法来处理这个问题?

【问题讨论】:

标签: ios json null nsuserdefaults


【解决方案1】:

您可以先将您的 NSDictionary 转换为 NSData,然后安全地存储在 NSUserDefaults 中(因为 NSNull 符合 NSCoding)。

//archive
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"];

//unarchive
NSData *newData = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
NSDictionary *newDict = [NSKeyedUnarchiver unarchiveObjectWithData:newData];

编辑:引用的是原始数据对象而不是 newData 对象。

【讨论】:

    【解决方案2】:

    我尝试了一些递归解决方案,但它们往往很复杂并且不能很好地处理混合类型的内容。如果您对清洁有可预测的、平坦的响应,这里最简单的例子就是一个平坦的例子。

    NSMutableDictionary *dictMutable = [dict mutableCopy];
    [dictMutable removeObjectsForKeys:[dict allKeysForObject:[NSNull null]]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多