2009-11-27 3 views
0

JSON 파일을 구문 분석하고 있습니다.NSNull이 내 initWithDictionary를 충돌합니다.

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

기본적인 문제는이 것을 없을 것 같다 valueForKey에 대한 호출에서 돌아 오는 NSNull의 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 

, 블레이크.

+0

감사합니다. 일했다! 당신은 영리합니다. 구글이나 모질라 같은 사람이 당신을 고용해야합니다. – runmad

0

int 그렇게 intValue 그것이 nil 개체의 intValue을 얻을 수없는 당신에게 말할 수있는 방법이없는, nil 수 없습니다. intValue을 요청하기 전에 valueForKey:에서 반환 된 객체가 있는지 확인해야합니다.

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

intValue를 호출하기 전에 NSNull에 대해 간단한 테스트를 수행하십시오. NSNull 객체를 확장 할 필요가 없습니다.

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

    // put your code here 

}