2011-02-25 52 views
0

我一直坚持这个问题几个小时,我看不到灯。请给我一个这样的手:问题:滚动tableview,然后选择搜索栏(iphone)

我有一个tableview和一个搜索栏。搜索栏位于导航栏中。当我这样做的tableview的快速滚动,如果我选择了搜索栏,而实现代码如下仍在减速,无一例外提出:

终止应用程序由于未捕获的 异常“NSRangeException”,原因: “ - [NSMutableArray的objectAtIndex:]: 指数31超出界限为空 阵列”

我怎样才能停止的编程方式的减速的tableview?

谢谢你的时间!

+0

我们可以看到一些代码吗? – Moshe 2011-02-25 07:22:52

回答

0

不用代码片段就可以解决这个错误。然后,我认为这个错误是在滚动tableview &之后选择搜索栏的时候,你正在让你的数组为空或者删除所有的对象从中。

望着看来错误时选择终止应用程序搜索栏 由于未捕获的异常“NSRangeException”,原因是:“ - [NSMutableArray的objectAtIndex:]:指数31超越界限空阵”

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

而在另一方面,一旦表滚动创建新的细胞寻找,因为所有对象的数组。但indexPath对象从阵列已经被移除,它只是崩溃您应用程式&显示此错误。

所以我建议你采取两个不同的阵列,你有完整的记录&然后其他搜索结果&然后重新加载表使用数组。

肯定会摆脱这个错误。否则,请确保在搜索完成之前,不要删除阵列中的所有对象。

这是您可以用于搜索的逻辑。 :)

  • (无效)搜索栏:(的UISearchBar *)theSearchBar textDidChange:(的NSString *)SEARCHTEXT {

    //第一删除所有对象。 copyListOfItems = [[NSMutableArray alloc] init]; [copyListOfItems removeAllObjects];

    如果([SEARCHTEXT长度]> 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]; }