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崩溃后顶栏消失-没有关闭按钮-无法移动窗口