2012-01-08 5 views
1

가능한 중복을 해제 :
index 0 beyond bounds for empty array errorALLOC는 초기화

나는 아이폰 OS 프로그래밍에 취미입니다. 그리고 프로그래밍하는 동안 나는 항상 같은 문제가 있습니다. 메모리 관리 문제를 이해할 수 없다고 생각합니다.

H-파일 : NSMutableArray를 포함하는 NSStrings

NSMutableArray *pictureStrings; 

@property (nonatomic,retain) NSMutableArray *pictureStrings; 
는 M-파일에

:

@synthesize pictureStrings; 

과의 viewDidLoad 방법

pictureStrings = [[NSMutableArray alloc] init]; 
에 이 내 실제 프로젝트
[pictureStrings release]; 

괜찮습니다. 나는 값이 나는

if (pictureStrings != nil) { 
    cell.textLabel.text = [NSString stringWithFormat:@"%@", [pictureStrings objectAtIndex:indexPath.row]]; 
} 
처럼 cellForRowAtIndexPath 메소드에서 값을 읽을 pictureStrings

[pictureStrings addObject:aString]; 

하지만 에 저장받을 문자열과 connectionDidFinishLoading 위임 방법의 수를 가져옵니다 비동기 URL 요청 함께 일하고 메시지와 함께

내 응용 프로그램 충돌 :

* 기간 이유 때문에 캐치되지 않는 예외 'NSRangeException'에 응용 프로그램을 inating : '* - [NSMutableArray를 objectAtIndex :] : 빈 배열 범위를 넘는 인덱스 0'

내 잘못이 어디에 있습니까? 도와주세요!

당신, 라파엘. 인사말 오스트리아

답변

3

에서 충돌이 메모리 관리 문제가되지 않습니다. 귀하의 충돌은 당신이 배열의 마지막을 지나가고 있다는 것입니다. 우리는 다음 objectAtIndex: 방법은 자동 것이다 단지 nil 반환이 전무 있다면 때문에 pictureStrings 비 전무는, 그 시점에서 것을 알고 (nil 반환 메시징 때문에 nil [1]). 아, 어쨌든 objectAtIndex: 번으로 전화를 걸어 if을 보내지는 않겠지 만, 필요 없으면 안전하게 제거 할 수 있습니다.

그래서, 정말 여기 일이 할 수있는 유일한 방법은 테이블 뷰를 다시로드하기 전에 [pictureStrings addObject:aString]가 호출되지 않는 것입니다. 그러나 테이블보기의 tableView:numberOfRowsInSection: 데이터 소스 메서드에서 return pictureStrings.count과 같은 작업을한다고 가정하기 때문에 이는 매우 이상합니다. 배열에 실제로 요소가 없으면 테이블 뷰는 행을 묻지 않고이 충돌을 얻지 않을 것입니다.

당신의 문제는 배열에 문자열을 추가하지 않는다고 생각됩니다. 해당 코드를 중단 점을 확인하고 무슨 일이 일어나고 있는지 확인할 수 있습니다.

또한,이에 셀의 텍스트를 설정하는 코드를 변경하는 것을 고려 :

cell.textLabel.text = [pictureStrings objectAtIndex:indexPath.row]; 

당신은 그래서 왜 stringWithFormat: 호출을 통해가는 귀찮게 이미 문자열했다?

[1] 경고 : 항상 nil을 반환하지는 않음 - 자세한 내용은 해당 정보를 참조하십시오.

+0

안녕 얘들 아 : 그건 내 어리석은 결함 중 하나 였어. 당신 말이 맞아요. 메모리 관리 문제가 아니 었습니다. 내 생각은 그림에 대한 모든 경로를로드하지만 tableView의 처음 10 개만 표시하는 것이 었습니다. 그래서 오류가 발생했습니다. 정말 고마워요! – Raphael