2011-02-25 81 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]; }