NSNull崩溃了我的initWithDictionary

时间:2009-11-27 19:35:05

标签: objective-c json null nsdictionary

我正在解析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;
}

3 个答案:

答案 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

}
相关问题