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

Posted

技术标签:

【中文标题】Iphone 搜索栏清除按钮崩溃的应用程序【英文标题】:Iphone Search Bar clear button crashing app 【发布时间】:2009-09-01 22:32:39 【问题描述】:

我正在开发一个具有搜索功能的 iPhone 应用程序,其中在 UISearchBar 中编写搜索词会更改(过滤)下面的 UITabelView 的输出。

当用户在编辑搜索栏的内容并删除所有文本时,会在

中执行以下代码
- (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)'

看来问题在于重新加载表视图数据,但我无法弄清楚为什么在一种情况下数组的索引会出现问题,而在另一种情况下却没有。

有人知道为什么会这样吗?感谢所有帮助。

格雷戈, 瑞典

【问题讨论】:

【参考方案1】:

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

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar

方法之后调用

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

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

问题已解决,希望此信息对其他人有所帮助。

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

格雷戈, 瑞典

【讨论】:

【参考方案2】:
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText 
        ... 
        [searchBar becomeFirstResponder]; 
 [self.tableView reloadData];

【讨论】:

【参考方案3】:

如果搜索字段包含@"",但数组!= nil,您可以尝试覆盖- (BOOL)acceptsFirstResponder 并返回NO。我认为这应该可行。

【讨论】:

以上是关于Iphone 搜索栏清除按钮崩溃的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

linux-ubuntu-matlab崩溃后顶栏消失-没有关闭按钮-无法移动窗口

linux-ubuntu-matlab崩溃后顶栏消失-没有关闭按钮-无法移动窗口

linux-ubuntu-matlab崩溃后顶栏消失-没有关闭按钮-无法移动窗口

输入字符时搜索栏崩溃的应用程序

导航栏后退按钮,应用崩溃

按活动栏中的按钮导致应用程序崩溃