4

方向に応じて、特定の範囲の長さの配列内の多数の画像をインデックスに渡し、選択的に取得できるこのコードがあります。

縦向きの場合、範囲はインデックスあたり 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;

どうすればこれを防ぐことができますか?

ありがとう。

4

2 に答える 2

2
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count)
     rangeForView = NSMakeRange( index * kItemsPerView, tempArray.count-index*kItemsPerView );
于 2010-11-23T11:08:29.120 に答える
2

別のアプローチとして、MIN()関数を使用して範囲の終わりを決定するだけです。

例:

NSRange range;
range.location = index * kItemsPerView;
range.length = MIN(kItemsPerView, tempArray.count - range.location);
NSArray *imagesForView = [tempArray subarrayWithRange:range];
于 2015-03-25T17:30:43.213 に答える