Swift3 - 搜索崩溃的第一个字母 Table 查看

Swift3 - First Letter of Search Crashing Table View

当我的 "else" 块的第一行运行时出现此错误:

unable to dequeue a cell with indentifier PhoneCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

因此,最初的 table 加载正常,但是当您尝试进行搜索时会抛出此异常。这只是在我进入自定义单元格后才开始发生。这是崩溃的 table 的 cellForRowAtIndexPath 函数。知道发生了什么吗?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    if tableView == self.tableView{
        let cell = self.tableView.dequeueReusableCell(withIdentifier: "PhoneCell", for: indexPath) as! PhoneSearchResultTableViewCell
        cell.nameLabel.text = phones[indexPath.row].name.value
        cell.descriptionLabel.text = phones[indexPath.row].descriptionText.value
        cell.modelLabel.text = phones[indexPath.row].model.value
        return cell
    }else{
        let cell = self.resultsController.tableView.dequeueReusableCell(withIdentifier: "PhoneCell", for: indexPath) as! PhoneSearchResultTableViewCell
        cell.nameLabel.text = filteredPhones[indexPath.row].name.value
        cell.descriptionLabel.text = filteredPhones[indexPath.row].descriptionText.value
        cell.modelLabel.text = filteredPhones[indexPath.row].model.value
        return cell
    }
}

看来您使用的是 UITableViewController 而不是单独的 UITableView。如果您在 IB 中将该自定义单元格创建为原型单元格,请确保在代码和 IB 中将重用标识符设置为相同。

UITableViewController自动注册原型细胞。

但是,如果您开始单独使用 UITableView,则需要使用自定义单元格的 UINib 或 class 调用 .register 方法。

您的 UITableViewController 在故事板中没有适合您的原型单元 "PhoneCell" 或者如果您以编程方式进行,则您没有为您的单元标识符注册 class正在打电话。

尝试在 UIViewControllerviewDidLoad 或实例化 UITableView 之前的某处添加它:

self.resultsController.tableView.register(PhoneSearchResultTableViewCell.self, forCellReuseIdentifier: "PhoneCell")