2010-11-23 15 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];