2009-09-01 60 views
1

我正在使用搜索功能的iPhone應用程序,在UISearchBar中編寫搜索條件更改(篩選器)下面的UITabelView的輸出。Iphone搜索欄清除按鈕崩潰的應用程序

當用戶正在編輯的搜索欄的內容,並刪除所有的文字,下面的代碼在

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    if([searchText isEqualToString:@""] || searchText==nil){ 

    [tableData removeAllObjects]; //clear array that holds data for table view 
    [tableData addObjectsFromArray:tumorNames]; //load array with database 
    [searchTableView reloadData]; 
    return; 
    } 
} 

(method continues...) 

現在執行的搜索欄裏面進行編輯時,這工作得很好:你是否刪除所有帶退格/刪除的文本或按下「清除」按鈕無關緊要 - 清除搜索字段,並在表格視圖中顯示所有可搜索項目。按下「取消」按鈕也是一樣,但是在這種情況下,搜索欄會自動退出第一個響應者。

但是,當搜索完成並且一個或多個結果項目顯示在表格視圖中(搜索欄已經退出第一個響應者並且鍵盤消失)時,仍然可以按清除按鈕,但結果是應用程序以下消息崩潰:

'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)' 

看來,這個問題是表視圖數據的重新裝載內,但我不知道爲什麼會有與陣列的在一種情況下,但不是索引的問題在另一個。

任何人都知道爲什麼會發生這種情況?所有幫助讚賞。

格雷戈爾, 瑞典

回答

2

原來,單擊清除按鈕時,委託方法

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

被方法之後調用

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

這可能看起來很奇怪,但解釋了我的問題:當我刷新數組中持有表視圖的數據在前我thod(清除上次搜索)時,表格視圖嘗試從中讀取時出現錯誤。

問題解決了,希望這個信息對別人有幫助。

我現在需要做的是在點擊取消按鈕時使搜索欄不成爲第一響應者。有人知道怎麼做嗎?

格雷戈爾, 瑞典

+0

[searchBar resignFirstResponder];做的伎倆 – Souljacker 2013-02-13 08:54:27

0

你可以嘗試重寫- (BOOL)acceptsFirstResponder並返回NO如果searchfield包含@"",但陣列!= nil。我認爲這應該工作。

1
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText { 
     ... 
     [searchBar becomeFirstResponder]; 
[self.tableView reloadData];