Ответ 1
Теперь я нашел проблему.
Удаление obj_exception_throw
из моих точек останова решило это. Теперь он попадает в блок @try
, а также NSSetUncaughtExceptionHandler
будет обрабатывать это, если отсутствует блок @try
.
Почему @try не работает? Это разбило приложение, но оно должно было быть захвачено блоком @try.
NSString* test = [NSString stringWithString:@"ss"];
@try {
[test characterAtIndex:6];
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
@finally {
NSLog(@"finally");
}
Теперь я нашел проблему.
Удаление obj_exception_throw
из моих точек останова решило это. Теперь он попадает в блок @try
, а также NSSetUncaughtExceptionHandler
будет обрабатывать это, если отсутствует блок @try
.
Все работают отлично :)
NSString *test = @"test";
unichar a;
int index = 5;
@try {
a = [test characterAtIndex:index];
}
@catch (NSException *exception) {
NSLog(@"%@", exception.reason);
NSLog(@"Char at index %d cannot be found", index);
NSLog(@"Max index is: %lu", [test length] - 1);
}
@finally {
NSLog(@"Finally condition");
}
Журнал:
[__NSCFConstantString characterAtIndex:]: диапазон или индекс вне границ
Символ с индексом 5 не найден
Макс индекс: 3
Наконец условие
Вы уверены, что это не что-то еще, потому что точный код, который вы вставили выше, отлично работает.
2010-07-29 16:45:57.677 test[93103:207] Exception: *** -[NSCFString characterAtIndex:]: Range or index out of bounds
2010-07-29 16:45:57.678 test[93103:207] finally
Objective-C - это не Java. В Objective-C исключения называются так, как они называются. Исключения! Не используйте их для обработки ошибок. Это не их предложение. Просто проверьте длину строки перед использованием characterAtIndex, и все в порядке....