NSNull 使我的 initWithDictionary 崩溃
Posted
技术标签:
【中文标题】NSNull 使我的 initWithDictionary 崩溃【英文标题】:NSNull crashes my initWithDictionary 【发布时间】:2009-11-27 19:35:04 【问题描述】:我正在解析一个 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;
【问题讨论】:
【参考方案1】:基本问题似乎是 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
后来, 布莱克。
【讨论】:
【参考方案2】:int
不能是nil
,因此intValue
无法告诉您它无法获取nil
对象的intValue
。在请求 intValue
之前,您需要检查是否有从 valueForKey:
返回的对象。
if ([boxDictionary valueForKey:@"box_count"])
numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
【讨论】:
【参考方案3】:在调用 intValue 之前,只需对 NSNull 做一个简单的测试。无需扩展 NSNull 对象。
if ([rate valueForKey:@"value"]!=[NSNull alloc])
// put your code here
【讨论】:
以上是关于NSNull 使我的 initWithDictionary 崩溃的主要内容,如果未能解决你的问题,请参考以下文章