Вопрос

глупый вопрос..Каков наилучший способ проверить, существует ли индекс 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 в SEQUINTION CONDUCTION от 0 до N-1 элементы

Вы пытаются 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);

Результат:"Какой - то случайный массив строк ....."

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top