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)
在上述代码的检查过程中,应该考虑结果数组为空,不是吗?
答案 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
上面有一篇关于如何完成这些文章的精彩文章