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正在打电话。
尝试在 UIViewController
的 viewDidLoad
或实例化 UITableView
之前的某处添加它:
self.resultsController.tableView.register(PhoneSearchResultTableViewCell.self, forCellReuseIdentifier: "PhoneCell")
当我的 "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正在打电话。
尝试在 UIViewController
的 viewDidLoad
或实例化 UITableView
之前的某处添加它:
self.resultsController.tableView.register(PhoneSearchResultTableViewCell.self, forCellReuseIdentifier: "PhoneCell")