iOS在UITableViewController里使用UISearchDisplayController报错"[UISearchResultsTableView dequeueReusableCellWithIdentifier:forIndexPath:]"

出现如下错误:

2016-02-13 22:09:22.318 Test[2757:192106] *** Assertion failure in -[UISearchResultsTableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:6564

出现这种错误的原因是因为当你点击搜索框的时候, 会出现一个新的UITableViewController, 然后调用UITableViewController的代理方法, 当调用到如下方法时, 就会出错

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

    cell.textLabel!.text = self.datas[indexPath.section].cities[indexPath.row]

    return cell
}

因为这里的tableView是UISearchResultsTableView, 当UISearchResultsTableView去内存池中寻找标示为reuseIdentifier的Cell的时候就会出现上面的错误

所以解决方法就是将tableView改为self.tableView即可, 因为self.tableView指的就是UITableViewController中的tableView

原文地址:https://www.cnblogs.com/Rinpe/p/5188363.html