@try @catch не работает target-c - PullRequest
       8

@try @catch не работает target-c

0 голосов
/ 27 февраля 2012

Запуск кода приводит к сбою.

 -(NSString*) ExtractStringKeyValue:(NSString*)key
{
    @try {
    NSRange  start = [_responceInfo rangeOfString:key];
    NSRange end  = [[_responceInfo substringFromIndex:start.location + start.length+2] 
                      rangeOfString:@"\""];

    NSRange rang = NSMakeRange(
                               start.location + start.length+1
                               , end.location+1);
    return [_responceInfo substringWithRange:rang];
    }
    @catch (NSException * e) {
        NSLog(@"Exception: %@", e);
    }
    @finally {
        NSLog(@"finally");
    }
}

Консоль отладки:

2012-02-27 01: 10: 16.254 Clicky [8665: 9203] Исключение: * - [NSCFString substringFromIndex:]: диапазон или индекс вне границ

2012-02-27 01: 10: 16.255 Clicky [8665: 9203] наконец

Помогите пожалуйста.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Как мы видим в консоли, ваш код проходит через блок @finally:

2012-02-27 00:28:02.794 Clicky[8409:9203] finally

И согласно сообщению об ошибке Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSCFString substringFromIndex:]: Range or index out of bounds', я могу сказать вам, что ваша проблема не в этом методе.

1 голос
/ 23 ноября 2013

Вы ничего не возвращаете из метода, если блок @try завершается неудачно, нет строки для возврата ...

-(NSString*) ExtractStringKeyValue:(NSString*)key
{
    NSString *extractedString = nil;
    @try {
    NSRange  start = [_responceInfo rangeOfString:key];
    NSRange end  = [[_responceInfo substringFromIndex:start.location + start.length+2] 
                      rangeOfString:@"\""];

    NSRange rang = NSMakeRange(start.location + start.length+1, 
                               end.location+1);
    extractedString = [_responceInfo substringWithRange:rang];
    }
    @catch (NSException * e) {
        NSLog(@"Exception: %@", e);
    }
    @finally {
        NSLog(@"finally");
    }
    return extractedString;
}
0 голосов
/ 27 февраля 2012

Я не вижу substringFromIndex в коде, который вы вырезали и вставили, поэтому причина, по которой ваш блок @try / @catch не работает, заключается в том, что исключение, которое вы видите здесь, не исходит из этого кода.: -)

...