我的应用程序工作正常,但是当我点击UISearchBar
并且在我向下滚动UITableView
时没有输入时突然显示应用程序因以下错误而崩溃:Thread1 : EXC_BAD_INSTRUCTION
但是当我点击UISearchBar
并输入一些文字后,当我向下滚动UITableView
时,应用程序运行正常,它不会崩溃。
最后,当我点击UISearchBar
并输入一些文字并删除所有文字后,当我向下滚动UITableView
时,应用程序正常运行,它不会崩溃。
此功能出错:
func tableView(historyTableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = historyTableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell;
//self.historyTableView.scrollEnabled = true
if(searchActive){
//...Error occurs over here ==>> Thread1 : EXC_BAD_INSTRUCTION
cell.textLabel?.text = filtered[indexPath.row]
} else {
cell.textLabel?.text = data[indexPath.row]
}
return cell;
}
答案 0 :(得分:1)
我的猜测是,当您开始主动搜索时,您不会重新加载表格。我还猜测nunberOfRowsInSection:
没有处理主动搜索的情况。如果这些事情属实,那么当您滚动到大于filtered[indexPath.row]
filtered.count
会使您的应用崩溃
答案 1 :(得分:0)
我希望您也在[{1}}方法中处理了filtered
和data
数组。
numberOfRowsInSection
现在,当您点击func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive){
return filtered.count
}else{
return data.count
}
}
时,您必须将searchActive
设为true
。
UISearchBar
希望这有帮助!
答案 2 :(得分:0)
通过这种方式,我已经克服了这个问题。
func tableView(historyTableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = historyTableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell;
if(searchActive){
if(searchBar.text=="")
{
//do nothing
}else{
cell.textLabel?.text = filtered[indexPath.row]
}
} else {
cell.textLabel?.text = data[indexPath.row]
}
return cell;
}