Проверка NSArray за пределами границ
-
16-12-2019 - |
Вопрос
глупый вопрос..Каков наилучший способ проверить, существует ли индекс NSArray или NSMutableArray.Я ищу повсюду, но безрезультатно!!
Это то, что я пробовал:
if (sections = [arr objectAtIndex:4])
{
/*.....*/
}
или
sections = [arr objectAtIndex:4]
if (sections == nil)
{
/*.....*/
}
но оба выдают ошибку "out of bounds", не позволяющую мне продолжить
(не отвечайте с помощью try catch, потому что это не решение для меня)
Заранее спасибо
Решение
if (array.count > 4) {
sections = [array objectAtIndex:4];
}
. Другие советы
Если у вас есть целочисленный индекс (например, i
), вы, как правило, предотвратите эту ошибку, проверив границы массивов, как это
int indexForObjectInArray = 4;
NSArray yourArray = ...
if (indexForObjectInArray < [yourArray count])
{
id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray];
}
. Имейте в виду NSARRAY в
Вы пытаются access
item
, который имеет array
.
Редактировать : @ @ @ sch's Ответ выше показывает, как мы можем проверить, требуется ли NSArray, необходимый присутствующий элемент или нет.
Вы можете использовать MIN
оператор должен тихо выйти из строя, как это [array objectAtIndex:MIN(i, array.count-1)]
, чтобы получить либо следующий объект в массиве, либо последний.Может быть полезно, когда вы, например, хотите объединить строки:
NSArray *array = @[@"Some", @"random", @"array", @"of", @"strings", @"."];
NSString *concatenatedString = @"";
for (NSUInteger i=0; i<10; i++) { //this would normally lead to crash
NSString *nextString = [[array objectAtIndex:MIN(i, array.count-1)]stringByAppendingString:@" "];
concatenatedString = [concatenatedString stringByAppendingString:nextString];
}
NSLog(@"%@", concatenatedString);
Результат:"Какой - то случайный массив строк ....."