问题:滚动tableview然后选择搜索栏(iphone)

时间:2011-02-25 03:25:23

标签: ios uitableview uisearchbar

我已经坚持这个问题几个小时,我看不到光。请帮我一把:

我有一个tableview和一个搜索栏。搜索栏位于导航栏中。当我快速滚动tableview时,如果我在tableview仍在减速时选择了搜索栏,则会引发异常:

  

因未捕获而终止应用   异常'NSRangeException',原因:   ' - [NSMutableArray objectAtIndex:]:   索引31超出空限   阵列

如何以编程方式停止tableview的减速?

谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

在没有代码片段的情况下解决错误有点困难。然后我从错误中想到的是滚动tableview&在那时你选择搜索栏你正在使你的数组​​为null或从中删除所有对象。

查看错误时,似乎选择了SearchBar 由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [NSMutableArray objectAtIndex:]:索引31超出空数组的边界'

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;

而另一方面,一旦滚动表创建新单元格,在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)