0

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

3 回答 3

4

基本问题似乎是 NSNull 上没有 intValue 方法,您从对 valueForKey: 的调用中返回。

你可以添加 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

后来,布莱克。

于 2009-11-27T19:57:31.797 回答
0

An intcannot be nil,因此intValue无法告诉您它无法获取对象的intValuethe nilvalueForKey:在您要求它之前,您需要检查您是否收到了一个返回的对象intValue

if ([boxDictionary valueForKey:@"box_count"])
    numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
于 2009-11-27T19:59:05.617 回答
0

在调用 intValue 之前,只需对 NSNull 做一个简单的测试。无需扩展 NSNull 对象。

if ([rate valueForKey:@"value"]!=[NSNull alloc]) {

    // put your code here

}
于 2012-11-30T10:09:34.723 回答