And*_*ing 14 json ios github-mantle
我正在使用Mantle来解析一些通常看起来像这样的JSON:
"fields": {
"foobar": 41
}
Run Code Online (Sandbox Code Playgroud)
但是有时foobar的值为null:
"fields": {
"foobar": null
}
Run Code Online (Sandbox Code Playgroud)
这会导致MTLValidateAndSetValue抛出异常,因为它试图通过键值编码设置nil值.
我想要做的是检测此null值的存在并用-1替换它.
我尝试覆盖foobarJSONTransformer我的MTLModel子类,如下所示:
+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
if (inObj == [NSNull null]) {
return [NSNumber numberWithInteger: -1];
} else {
return inObj;
}
}];
Run Code Online (Sandbox Code Playgroud)
...我可以看到这个代码被调用但是inObj永远不会等于[NSNull null],因此替换不会发生,并且Mantle仍然抛出异常.
捕获此JSON null case并进行替换的正确方法是什么?
我错误地假设NSNull将为空JSON值生成.实际上它被解析为一个nil值.
因此,解决办法是检查inObj对抗nil,而不是NSNull:
+ (NSValueTransformer *)foobarJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(id inObj) {
if (inObj == nil) {
return [NSNumber numberWithInteger: -1];
} else {
return inObj;
}
}];
Run Code Online (Sandbox Code Playgroud)
然后替换将按预期工作.
如果您收到null,则会生成为NSNull.但是如果他们将missed这个字段或者发送给它empty,它将nil在解析时生成.所以你可以使用下面的代码
if (inObj == nil || inObj == [NSNull null] )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |