我已经坚持这个问题几个小时,我看不到光。请帮我一把:
我有一个tableview和一个搜索栏。搜索栏位于导航栏中。当我快速滚动tableview时,如果我在tableview仍在减速时选择了搜索栏,则会引发异常:
因未捕获而终止应用 异常'NSRangeException',原因: ' - [NSMutableArray objectAtIndex:]: 索引31超出空限 阵列
如何以编程方式停止tableview的减速?
谢谢你的时间!
答案 0 :(得分:0)
在没有代码片段的情况下解决错误有点困难。然后我从错误中想到的是滚动tableview&在那时你选择搜索栏你正在使你的数组为null或从中删除所有对象。
查看错误时,似乎选择了SearchBar 由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [NSMutableArray objectAtIndex:]:索引31超出空数组的边界'
而另一方面,一旦滚动表创建新单元格,在Array中查找indexPath对象。但是由于所有对象都已从数组中删除,因此只会使app&显示此错误。
所以我建议你采用两个不同的阵列,你有一个完整的记录&然后其他搜索结果&然后使用数组重新加载表。
你肯定会摆脱这个错误。否则,在搜索完成之前,确保你没有从数组中删除所有对象。
这是您可以用于搜索的逻辑。 :)
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
//首先删除所有对象。 copyListOfItems = [[NSMutableArray alloc] init]; [copyListOfItems removeAllObjects];
if([searchText length]> 0){
searching = YES;
tblView.scrollEnabled = YES;
NSString *searchText = searchBar.text;
NSLog(@"%@",searchText);
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
for (NSMutableDictionary *dictionary in YourMainArray)
{
NSRange titleResultsRange = [[dictionary valueForKey:@"English"] rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[copyListOfItems addObject:dictionary];
}
[searchArray release];
searchArray = nil;
} 别的{
searching = NO;
tblView.scrollEnabled = YES;
[searchBar resignFirstResponder];
}
[tblView reloadData]; }
答案 1 :(得分:0)