2011-08-05 3 views
0

나는 NSMutableArray를 UITableView와 함께 사용한다. 내가 직면하고 이상한 문제는NSMutableArray는 25 개 항목에 대해서만 사용 가능

[results removeObjectAtIndex:rowIndexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:rowIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 

는 테이블의 첫 번째 25 개 요소 작동하지만 26 일 충돌이다? 제 코드에는 아무 것도 언급되어 있지 않습니다. 25 개에 대한 언급이 없습니다.

모든 요소는 UITableView를 통해 올바르게 표시되므로 테이블에 제대로 삽입되었습니다.

어떤 도움이 필요합니까?

+0

당신이 말한 방법이 도움이된다면 도움이 훨씬 쉬울 것입니다. – greenisus

답변

1

인덱스에서 항목을 제거하면 테이블이 다시로드되지 않으므로 rowIndexPath.row 값이 제대로 조정되지 않으므로 배열 크기 이상으로 실행됩니다.

1

그냥 추측 : removeObjectAtIndex:(NSUInteger)index

, 당신은 문서에서 볼 수 있습니다 는 격차를 채우려면 인덱스를 넘어 모든 요소는 인덱스에서 1을 뺀 이동합니다. 따라서 요소를 축소하면 길이를 업데이트하지 않고 배열의 개수를 반복 할 수 없습니다. 그렇지 않으면 이전 색인에 의해 축소 된 목록이 예상보다 짧아지기 때문에 잘못된 색인을 읽으려고합니다.

+0

하지만 처음 25 열은 항상 작동합니까? 26 행만 실패합니다. 26 행을 지우려고 할 때 충돌이 발생합니다. 문제가 예상되는 어레이의 끝 부분이 아닙니다. –

+0

이것은 경계 밖의 것을 참조하는 특정 사례 일 수 있습니다. 인덱스 0에서 요소를 제거하여이 작업을 반복적으로 시도하십시오. [results removeObjectAtIndex : 0]; 이렇게 배열의 모든 요소를 ​​제거 할 수 있어야합니다. 그것은 잭이 말한 것을 증명해야합니다. –

+0

그러나 길이는 필수적으로 aotomatically 재 계산 된 시간입니다. 25 행 (25 열 이상인 경우)의 요소를 문제없이 연속적으로 제거 할 수 있습니다. –