Предотвратить исключение NSRangeException в subarrayWithRange - PullRequest
2 голосов
/ 23 ноября 2010

У меня есть этот код, который позволяет мне передавать индекс и выборочно извлекать количество изображений в массиве для определенной длины диапазона - в зависимости от ориентации.

Когда в портрете диапазон должен бытьбыть 20 пунктов на индекс, и у меня есть всего 43 элемента.Однако, когда я передаю последний индекс, я получаю исключение вне диапазона для индекса 59 за пределами [0..42].

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 ]

2 голосов
/ 23 ноября 2010
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count)
     rangeForView = NSMakeRange( index * kItemsPerView, tempArray.count-index*kItemsPerView );
1 голос
/ 25 марта 2015

Альтернативный подход, просто используйте функцию MIN() для определения конца диапазона.

Пример:

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