2013-08-06 5 views
2

배열에서 특정 기준을 충족하는 모든 항목을 포함하는 새로운 가변 배열을 만들고 싶습니다. 그건 문제가 아니야. 문제는 배열이 비어 있는지 확인하는 것입니다.배열에 객체가 있는지 확인합니다.

if (!theDates]) {/*do something*/} 

변경 가능한 배열이 만들어 졌기 때문에 관계없이 긍정적으로 돌아옵니다. 그러나

if (![theDates objectAtIndex:0]) 
    { 
     /* nothing got added to the array, so account for that */ 
    } 
    else 
    { 
     /* do something with the array */ 
    } 

충돌합니다.

+0

답변 중 하나에 해결책이있는 경우 대답하지 않은 섹션에서 질문을 삭제하려면 동의하는 것을 잊지 마세요. –

답변

5

배열을 할당했지만 여전히 비어 있기 때문에 충돌이 발생합니다. 줄 [theDates objectAtIndex:0]이 배열의 첫 번째 개체에 액세스하려고 시도하고 있으며 아직 배열이 없기 때문에 충돌합니다.

은 이렇게 배열의 무결성을 확인하려면 다음

if (theDates.count > 0) 
{ 
    //Do something 

    id object = theDates[0]; //this for sure won't crash 
} 
+1

수표의 첫 번째 부분은 필요하지 않습니다. 그냥'if (theDates.count) {' – rmaddy

+0

당신 말이 맞아요. 초기 연령대에서 nil 포인터의 속성에 액세스하면 충돌이 발생하여 더 이상 필요 없습니다. –

+0

이 검사에는'> 0'이 필요하지 않습니다. 물론 잘못된 것은 아니지만 필요하지 않습니다. – rmaddy

1

사용 [theDates count] > 0을. 존재하지 않는 요소에 액세스하고 있으므로 비어있을 때 충돌합니다.

0

if (theDates != nil){ if (theDates.count > 0){ 'do something' } }

이 다음 NullPointerException이이

+2

첫 번째'if' 문은 필요 없습니다. 그리고 코코아/코코아 터치 객체 포인터를 처리 할 때'null '이 아닌'nil'을 사용하는 것이 표준 규칙입니다. – rmaddy

+0

Ooops, Java에서 Obj-C로 컨벤션 사고 방식을 전환하는 것을 잊어 버렸습니다. –

0

을 발생 또는 배열이 비어있는 경우 nil을 반환합니다 lastObject 방법을 사용할 수 없습니다 빈 배열을 확인 널 배열을 확인해야

if (![theDates lastObject]) { do something } 
0
if((theDates!=nil) && (theDates.count > 0)) 
{ 
    //We have and existing array and something in there.. 
} 
0

괜찮습니다.

if (!URarray || !URarray.count){ 
    // write code here 
} 
관련 문제