NSNull崩溃了我的initWithDictionary
-
05-07-2019 - |
题
我正在解析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
}
不隶属于 StackOverflow