2010-11-23 4 views
2

오리엔테이션에 따라 색인에 전달하고 특정 범위 길이에 대해 배열의 이미지를 선택적으로 검색 할 수있는이 코드가 있습니다.subarrayWithRange의 NSRangeException을 방지합니다.

인물의 범위는 인덱스 당 20 개 항목이어야하며 전체적으로 43 개의 항목이 있어야합니다. 그러나 내가 마지막 색인을 통과하면 [0..42]의 범위를 벗어나는 색인 59에 대해 범위를 벗어난 예외가 발생합니다.

NSArray *tempArray = [self imageData]; 

UIDeviceOrientation devOr = [[UIDevice currentDevice] orientation]; 

int kItemsPerView; 

if (UIDeviceOrientationIsPortrait(devOr)) { 
    kItemsPerView = 20; 
}else { 
    kItemsPerView = 14; 
} 

NSRange rangeForView = NSMakeRange(index * kItemsPerView, kItemsPerView); 

NSArray *subArray = [[tempArray subarrayWithRange:rangeForView] retain]; 
NSMutableArray *imagesForView = [NSMutableArray arrayWithArray:subArray]; 
[subArray release]; 

return imagesForView; 

어떻게 방지 할 수 있습니까?

감사합니다.

답변

2
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count) 
    rangeForView = NSMakeRange(index * kItemsPerView, tempArray.count-index*kItemsPerView); 
1

대체 방법은 범위 끝을 결정하는 데 MIN() 함수를 사용하십시오.

예 :

NSRange range; 
range.location = index * kItemsPerView; 
range.length = MIN(kItemsPerView, tempArray.count - range.location); 
NSArray *imagesForView = [tempArray subarrayWithRange:range]; 
관련 문제