Iphone搜索栏清除按钮崩溃的应用程序

问题描述:

我正在使用搜索功能的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)' 

看来,这个问题是表视图数据的重新装载内,但我不知道为什么会有与阵列的在一种情况下,但不是索引的问题在另一个。

任何人都知道为什么会发生这种情况?所有帮助赞赏。

格雷戈尔, 瑞典

原来,单击清除按钮时,委托方法

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

被方法之后调用

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

这可能看起来很奇怪,但解释了我的问题:当我刷新数组中持有表视图的数据在前我thod(清除上次搜索)时,表格视图尝试从中读取时出现错误。

问题解决了,希望这个信息对别人有帮助。

我现在需要做的是在点击取消按钮时使搜索栏不成为第一响应者。有人知道怎么做吗?

格雷戈尔, 瑞典

+0

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

你可以尝试重写- (BOOL)acceptsFirstResponder并返回NO如果searchfield包含@"",但阵列!= nil。我认为这应该工作。

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