Obj- C - Нет доступа к значениям в NSArray? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть textView, который отображает строку: 255,34,7,4

Я пытаюсь использовать следующий код, чтобы вытащить строку из моего textView и отделить каждое число в массив:

        NSArray *array = [self.textview.text componentsSeparatedByString:@","];
        NSString *comp1 = array[0];
        NSString *comp2 = array[1];
        NSString *comp3 = array[2];

Это работает, и в мой массив возвращается следующее:

> 2020-07-11 15:21:58.110560-0700[10116:2311809] In the array you will
> find (
>     255,
>     34,
>     7,
>     4 )

Однако я не могу получить доступ ко второму и третьему значениям с помощью массива [1] и массив [2]? Мое приложение вылетает со следующей ошибкой:

*** Завершение работы приложения из-за неперехваченного исключения 'NSRangeException', причина: '*** - [__ NSSingleObjectArrayI objectAtIndex:]: индекс 1 за пределами [0. . 0] '

Почему это происходит?

1 Ответ

1 голос
/ 12 июля 2020

, потому что в тот момент, когда вы пытаетесь получить доступ, ожидаемые объекты не существуют. Гораздо безопаснее запрашивать количество индексов, доступных в массиве, прежде чем обращаться к индексам, которые могут не существовать во время выполнения.

NSArray *splitarray = [self.textview.text componentsSeparatedByString:@","];

NSLog(@"amount of indexes %lu", splitarray.count);

for (NSString *idxObject in splitarray) {
    NSLog(@"content @%",idxObject);
}

или

for (NSUInteger i=0; i<splitarray.count; i++) {
    NSLog(@"content @%",splitarray[i]);
}

NSArray и многие другие индексированные типы данных не проверяют, существует ли индекс для ускорения доступа, и они также не построены для возврата nil в случае, если индекс не существует.

...