NSArray - objectAtIndex: - PullRequest
       3

NSArray - objectAtIndex:

1 голос
/ 29 мая 2011

У меня проблема. Я получаю сообщение об ошибке, если objectAtIndex: x пусто. В моем коде пользователь должен вставить код, разделенный символом "/", как 32/31/43 или даже 32 // 12. Все работает, но если пользователь вставил одно число без "/", я получил ошибку, показанную на картинке, но я хотел бы получить предупреждение, которое сообщает пользователю, что код вставлен в неправильном формате. Надеюсь, это понятно. Спасибо enter image description here

Ответы [ 3 ]

2 голосов
/ 29 мая 2011

Количество компонентов в массиве можно проверить с помощью

[componentDepthString count]

Перед тем, как вслепую ковыряться в массиве, убедитесь, что массив содержит столько элементов, сколько вам нужно:

// probably a bad idea to name the array with the word "string in it
NSArray *componentDepths = [depthString componentsSeparatedByString:@"/"];
NSInteger numComponents = [componentDepths count];

if(numComponents < 3) {
    // show an alert...

    return;
}

// otherwise proceed as before
2 голосов
/ 29 мая 2011

Вероятно, лучший способ сделать это - проверить массив после того, как вы его создали, чтобы убедиться, что есть 3 значения.

NSArray *componentDepthString = [depthString componentsSeperatedByString:@"/"];
if ([componentDepthString count] == 3) {
    // everything is good and you can continue with your code;
    //  rest of the code;
} else {
    // the user input bad values or not enough values;
    UIAlertView *myAlert = [[UIAlertView alloc] 
                                    initWithTitle:@"can't continue"
                                    message:@"user input bad values"
                                    delegate:self
                                    cancelButtonTitle:@"Cancel"
                                    otherButtonTitles:nil];
    [myAlert show];
    [myAlert release];
}

РЕДАКТИРОВАТЬ: вам придется отредактировать заголовок и сообщение, чтобы сказатьчто вы хотите, но это основная идея о том, как проверить плохие данные перед ошибкой и как вывести предупреждение.Вам нужно будет добавить свою собственную логику, как справиться с этим с пользователем

0 голосов
/ 29 мая 2011

Для строки "2" componentSeparatedByString вернет массив только с одним объектом: строка "2".

Вы пытаетесь прочитать объект с индексом 1 (т. Е. Второй объект), но у массива есть только один объект. Ошибка при попытке прочитать значение за пределами конца NSArray.

Кажется, вы пытаетесь сделать так, чтобы введенное значение имело два символа "/", так почему бы не проверить это сначала?

if ([componentDepthString count] != 3) {
   // show an alert and return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...