当UISearchBar处于活动状态时,滚动到UITableView应用程序会崩溃

时间:2016-02-26 06:47:41

标签: ios uitableview swift2 uisearchbar

我的应用程序工作正常,但是当我点击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;
    }

3 个答案:

答案 0 :(得分:1)

我的猜测是,当您开始主动搜索时,您不会重新加载表格。我还猜测nunberOfRowsInSection:没有处理主动搜索的情况。如果这些事情属实,那么当您滚动到大于filtered[indexPath.row]

的行时,调用filtered.count会使您的应用崩溃

答案 1 :(得分:0)

我希望您也在[{1}}方法中处理了filtereddata数组。

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;
    }