我正在解析JSON文件。
获取NSDictionary后,我将字典中的对象解析为一个对象数组。但是,对于某些JSON文件,我得到NULL,这应该没问题,但它崩溃了我的应用程序,我想要的东西,但得到null:
- (id)initWithDictionary:(NSDictionary *)boxDictionary {
if ([self init]) {
// ...
int numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
int numberOfItemsInBoxes = [[boxDictionary valueForKey:@"box_items_count"] intValue];
// ..
}
return self;
}
答案 0 :(得分:4)
基本问题似乎是NSNull上没有你从调用valueForKey回来的intValue方法:。
你可以添加intValue方法,但是你会为NSNull返回什么? 0? -1
执行此操作的代码看起来像这样。
在MyNullExtensions.h中:
@interface NSNull (integer)
-(int) intValue;
@end
在MyNullExtensions.m中:
#import "MyNullExtensions.h"
@implementation NSNull (functional)
-(int) intValue
{
return -1;
}
@end
后来 布雷克。
答案 1 :(得分:0)
int
不能nil
,因此intValue
无法告诉您无法获取intValue
的{{1}}宾语。在您要求nil
之前,您需要检查是否从valueForKey:
返回了一个对象。
intValue
答案 2 :(得分:0)
在调用intValue之前,只需对NSNull进行一个简单的测试。无需扩展NSNull对象。
if ([rate valueForKey:@"value"]!=[NSNull alloc]) {
// put your code here
}