Suk*_*ruK 9 iphone json objective-c ios ios7
我想从JSON服务获取数据.从JSON值获取数据时,只有iOS 7版本崩溃.它从下面的JSON服务返回:
{
voteAverageRating = 0;
voteCount = 0;
}
Run Code Online (Sandbox Code Playgroud)
我的代码
int voteCount = [listDic objectForKey:@"voteCount"] intValue] ;
_LB_voteNumber.text = [NSString stringWithFormat:@"(%i)",voteCount];
Run Code Online (Sandbox Code Playgroud)
它适用于iOS 5,5.1,6.0,6.1,但它只崩溃了iOS7版本.它给出了这个错误:
0x00098117 _mh_execute_header [NSNull intValue]:发送到实例的无法识别的选择器
然后我改变了我的代码;
NSString *voteCount = [listDic objectForKey:@"voteCount"] ;
_LB_voteNumber.text = [NSString stringWithFormat:@"(%@)",voteCount];
Run Code Online (Sandbox Code Playgroud)
运行此代码时.它再次崩溃只有iOS 7版本.它给出了这个错误:
0x00098117 _mh_execute_header [NSNull length]:发送到实例的无法识别的选择器
我怎么解决这个问题 ?
Ama*_*mar 40
在从JSON访问值之前先检查一下,
if([NSNull null] != [listDic objectForKey:@"voteCount"]) {
NSString *voteCount = [listDic objectForKey:@"voteCount"];
/// ....
}
Run Code Online (Sandbox Code Playgroud)
检查的原因是,收集对象如NSDictionary不允许值nil,因此它们存储为null.传递intValue给一个NSNull将无法正常工作,因为它无法识别此选择器.
希望有所帮助!
正如其他人所说,JSON null将被反序列化为NSNull.不同的是nil,你不能发送(大多数)消息NSNull.
一种解决方案是通过类别在NSNull上添加-intValue的实现:
@implementation NSNull (IntValue)
-(int)intValue { return 0 ; }
@end
Run Code Online (Sandbox Code Playgroud)
现在你的代码将工作,因为发送-intValue到NSNull现在将返回0
另一种选择:您还可以向NSObject添加"IfNullThenNil"类别...
@implementation NSObject (IfNullThenNil)
-(id)ifNullThenNil { return self ; }
@end
@implementation NSNull (IfNullThenNil)
-(id)ifNullThenNil { return nil ; }
@end
Run Code Online (Sandbox Code Playgroud)
现在,您的代码变为:
int voteCount = [[[listDic objectForKey:@"voteCount"] ifNullThenNil] intValue] ;
Run Code Online (Sandbox Code Playgroud)
只需-ifNullThenNil在您从JSON对象访问值的位置添加调用即可.
| 归档时间: |
|
| 查看次数: |
13717 次 |
| 最近记录: |