@try @catch不起作用objective-c

时间:2012-02-26 22:42:17

标签: objective-c ios crash try-catch

运行代码会导致崩溃。

 -(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 个答案:

答案 0 :(得分:2)

我们可以在Console中看到输出,您的代码将通过@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 :(得分:1)

如果@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;
}

答案 2 :(得分:0)

我在你剪切的代码中没有看到substringFromIndex。粘贴,所以@try / @catch块无法正常工作的原因是因为您在此处看到的异常不是来自该代码。 : - )