indexSetWithIndexesInRange не выполняет ожидаемого - PullRequest
5 голосов
/ 26 октября 2010

Я хочу выбрать несколько объектов из массива. Поэтому я использую начальные и конечные индексы моего выбора.

NSLog(@"start:%d\nend:%d", startIndex, endIndex);
NSIndexSet *myIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(startIndex, endIndex)];
NSLog(@"%d", [myIndexes lastIndex]);

Первый NSLog дает мне

STARTINDEX: 49
ENDINDEX: 67

Второй NSLog дает мне

115

Почему у меня 115 как наибольшее число? Должно быть 67. Конечно приложение вылетает:

Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: '* - [NSArray objectsAtIndexes:]: индекс 115 за пределами [0 .. 96]'

Что я делаю не так?

1 Ответ

16 голосов
/ 26 октября 2010
Членами

NSRange являются location и length, а не start и end. Это означает, что вам нужно создать структуру NSRange следующим образом:

NSMakeRange(startIndex, endIndex - startIndex);
...