Обработка ошибок в Xcode, iPhone SDK - PullRequest
2 голосов
/ 10 ноября 2009

В Visual Basic есть строка кода, которую вы можете использовать для обработки ошибок в коде

"On Error Resume Next"

Есть ли что-то похожее в Objective-C? Моя проблема в том, что у меня есть кнопка «Добавить новую ячейку», которая создает новую ячейку во время выполнения. Тем не менее, клетки переупорядочиваются. Когда вы пытаетесь изменить порядок ячеек «Добавить новую ячейку», я получаю ошибку индекса за пределами границ. Если бы я мог просто исправить возникшую ошибку, это было бы замечательно, но если есть обработчик ошибок, который я мог бы использовать, чтобы просто выйти из функции перемещения при возникновении ошибки, это тоже было бы здорово.

Вот мой код moveRowAtIndexPath:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    iProfileAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [appDelegate moveFromOriginal:fromIndexPath.row toNew:toIndexPath.row];
}

Вот ошибка, которую я получаю:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (7) beyond bounds (7)'

Ответы [ 3 ]

5 голосов
/ 10 ноября 2009

Это ошибка границ массива, которая должна быть исправлена.

Вы пытались запретить пользователю перемещать ячейку "Добавить новую ячейку"?

Для этого необходимо реализовать tableView: canMoveRowAtIndexPath: и вернуть NO для строки ячейки «Добавить новую ячейку» (YES для всех остальных строк).

3 голосов
/ 10 ноября 2009

Вы можете использовать попробовать и поймать. Они - то, как цель c и некоторые другие обрабатывают исключения. Они поймают «неперехваченное исключение», аналогичное тому, как я предполагаю, что «При возобновлении ошибки дальше» работает.

@try {
    /*this is where the code that might throw an exception goes*/
    [appDelegate moveFromOriginal:fromIndexPath.row toNew:toIndexPath.row];
}
@catch (NSException *exception) {
    /*add something here if you want it to do something special when the exception(or "error") is thrown*/
}
@finally {
    /*you don't have to include this finally part but if you do the code in it is excecuted weather the exception is thrown or not*/
}
1 голос
/ 10 ноября 2009

Вам следует прочитать этот вопрос о получении трассировки стека для сгенерированных исключений. Это позволит вам точно определить, где возникает исключение, чтобы вы могли отладить его. Этот также может быть полезен.

Кстати, вы не хотите просто игнорировать подобные ошибки. Исключение выдается по причине. Вы должны устранить эту причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...