@try - блок вылова в Objective-C

Почему @try не работает? Это разбило приложение, но оно должно было быть захвачено блоком @try.

 NSString* test = [NSString stringWithString:@"ss"];

 @try {
    [test characterAtIndex:6];

 }
 @catch (NSException * e) {
    NSLog(@"Exception: %@", e);
 }
 @finally {
    NSLog(@"finally");
 }

Ответ 1

Теперь я нашел проблему.

Удаление obj_exception_throw из моих точек останова решило это. Теперь он попадает в блок @try, а также NSSetUncaughtExceptionHandler будет обрабатывать это, если отсутствует блок @try.

Ответ 2

Все работают отлично :)

 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

Наконец условие

Ответ 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

Ответ 4

Objective-C - это не Java. В Objective-C исключения называются так, как они называются. Исключения! Не используйте их для обработки ошибок. Это не их предложение. Просто проверьте длину строки перед использованием characterAtIndex, и все в порядке....