2014-01-07 1 views
0

나는 통해 미세 처음 작동하지만 루프를 통해 두 번째로 내가 얻을 루프가 : 여기 응용 프로그램은 nsnull 카운트 루프를 통해 두 번째 실행에 충돌되어

-[NSNull count]: unrecognized selector sent to instance 0x3a094a70 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull count]: unrecognized selector sent to instance 0x3a094a70' 

내 코드의 일부를 나는 그것이 (마지막 줄) 충돌 알고 여기서

... 
NSLog(@"dict::%@",dictForPost); 
// collect the photo urls in an array 
    photosInDict = [NSArray array]; 

// photos is an array of dictionaries in the dictionary 
photosInDict = dictForPost[@"photos"]; 
    if (photosInDict.count) { 
....   

내가 photosInDict는 DIC에 사진을 나던 때 충돌이 있음을 알고 있지만 내가 위의 배열을 시작한 이후 이유를 얻을니까.

답변

4
photosInDict = dictForPost[@"photos"] 

개체가 이전에 할당 photosInDict에 저장 대체합니다. 그러므로 배열을 할당하기 전에는 의미가 없습니다. dictForPost[@"photos"];의 결과는 당신에게 배열을 NSNull 개체를하지주고있다

if ([photosInDict isKindOfClass:[NSArray class]]) { 
    // Yes, it is an array. Do something with it. 
    if ([photosInDict count]) { 
     ... 
    } 
} 
4

그냥

NSArray * photosInDict = dictForPost[@"photos"]; 

다음 확인.

하나의 옵션이 될 것이다 :

NSLog(@"dict::%@",dictForPost); 
// collect the photo urls in an array 

// photos is an array of dictionaries in the dictionary 
photosInDict = dictForPost[@"photos"]; 
if ([photosInDict isKindOfClass:[NSArray class]] && photosInDict.count) { 

라인 :

photosInDict = [NSArray array]; 

무의미하고 제거해야합니다.

+0

if 진술의 조건에 부딪히기 때문에 나는 Martin R이 보여준 방법으로 if를 보호해야한다고 생각합니다. 첫 번째 조건이 충족되지 않으면 if 문이 종료되지 않는 한? – BluGeni

+1

내'if' 문이 정상적으로 작동합니다. 전반이 거짓이라면 후반은 평가되지 않을 것입니다. 이것은 단락 회로 평가 (short-circuit evaluation)라고하며 모든 C 기반 언어 (다른 많은 언어들도 마찬가지 임)가이를 사용합니다. – rmaddy

+0

오, 저도 몰랐습니다. 가르쳐 줘서 고마워요. – BluGeni

0

photosInDict을 빈 배열로 초기화하지만 사전의 값인 "photos"로 덮어 쓰면 그냥 NSNull이됩니다. 사전에 해당 키의 배열이없는 이유를 확인해야합니다.

상황에 따라 값이 NSNull 일 수있는 경우 개수를 계산하거나 다른 조치를 취하기 전에 배열인지 여부를 확인해야합니다.

+0

아니요, 'photos'값이 'null'이 아닙니다. 그것은 실제로 값을 가지며 값은'NSNull' 객체입니다. – rmaddy

+0

''null'은'[NSNull null]'과 같지 않습니까? 'NSNull'은 클래스이고,'null'은 인스턴스입니다, 맞습니까? 하지만 실제로, 오류 메시지는 NSNull을 말합니다. – Guilherme

+2

그냥 'null'이라고 말하는 것은 상당히 모호합니다. '[NSNull null]에 대한 호출은'null'이 아닌'NSNull' 인스턴스를 반환합니다. – rmaddy

관련 문제