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(清除上次搜索)时,表格视图尝试从中读取时出现错误。
问题解决了,希望这个信息对别人有帮助。
我现在需要做的是在点击取消按钮时使搜索栏不成为第一响应者。有人知道怎么做吗?
格雷戈尔, 瑞典
答
你可以尝试重写- (BOOL)acceptsFirstResponder
并返回NO
如果searchfield包含@""
,但阵列!= nil
。我认为这应该工作。
答
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
...
[searchBar becomeFirstResponder];
[self.tableView reloadData];
[searchBar resignFirstResponder];做的伎俩 – Souljacker 2013-02-13 08:54:27