iPhone:错误和错误处理混淆比较

时间:2010-06-09 18:22:33

标签: iphone objective-c

NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];

if(results == nil){
    NSLog(@"No results found");
    searchObj = nil;
}else{
    if ([[[results objectAtIndex:0] name] caseInsensitiveCompare:passdTextToSearchFor] == 0) {
        NSLog(@"results %@", [[results objectAtIndex:0] name]);
        searchObj = [results objectAtIndex:0];
    }else {
        NSLog(@"No results found");
        searchObj = nil;
    }       
}

上面的代码将用户输入的数据与从数据库中提取的数据进行比较。如果我输入数据库中的数据;有用。但是如果我输入完整的乱码,它会返回下面的错误,而不是“找不到结果。”

*** WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: <NSRangeException> *** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)

在上述代码的检查过程中,应该考虑结果数组为空,不是吗?

1 个答案:

答案 0 :(得分:3)

您可能会在以下代码行中抛出异常:

if ([[[results objectAtIndex:0] name] caseInsensitiveCompare:passdTextToSearchFor] == 0)

如果数组已初始化且元素为零,则您将传递nil检查,但在尝试访问数组本身内的任何对象时会抛出异常。

- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error可以返回一个空数组。您应该使用NSArray的count方法,而不是检查数组是否为零。

我建议您在objc_exception_throw和[NSException raise]上设置断点,以帮助您调试应用程序。然后在gdb中运行一个回溯来查看抛出异常的位置,以进一步诊断真正的问题。

克里斯·汉森(Chris Hanson)在here

上面有一篇关于如何完成这些文章的精彩文章