我正在解析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;
}
有帮助吗?

解决方案

基本问题似乎是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

后来 布雷克。

其他提示

int 不能是 nil ,所以 intValue 没有任何方法可以告诉你它无法获取 nil 对象的intValue 。在询问 intValue 之前,你需要检查是否从 valueForKey:返回了一个对象。

if ([boxDictionary valueForKey:@"box_count"])
    numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];

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

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

    // put your code here

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top