'unexpectedly found nil' 用于在 UITableView 中搜索

'unexpectedly found nil' for search in UITableView

我最近尝试将 UITableViewController 更改为 UIView 中的 UITableView。我改回这个是因为我的 UISearchBar 遇到错误,因为当我点击一个键来搜索我的应用程序时会因错误而崩溃:

fatal error: unexpectedly found nil while unwrapping an Optional value

这一行:

var cell = tableView.dequeueReusableCellWithIdentifier("rideCell")  as! RideCell

当我切换回 UITableViewController 时,这个错误消失了,一切都很好,但是我刚刚再次测试它,它再次给我这个错误。

有人有什么建议吗?它在正常的 table 视图中工作正常,只是当我去搜索时它崩溃了。标识符绝对正确。

谢谢!

编辑:

全功能:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell

    var ride: Ride

    if tableView == self.searchDisplayController?.searchResultsTableView {
        ride = DataManager.sharedInstance.getRideByName(searchResults[indexPath.row].name)!
    } else {
        ride = DataManager.sharedInstance.rideAtLocation(indexPath.row)!
    }

    cell.rideNameLabel.text = ride.name

    var dateSinceUpdate = NSDate().timeIntervalSinceDate(ride.updated!)
    var secondsSinceUpdate = Int(dateSinceUpdate)
    var timeSinceUpdate = printSecondsConvert(secondsSinceUpdate)

    cell.updatedLabel.text = timeSinceUpdate

    if ride.waitTime == "Closed" {
        cell.waitTimeLabel.text = ride.waitTime!
        cell.timeBackgroundView.backgroundColor = getColorFromNumber(80)
        cell.waitTimeLabel.font = UIFont(name: "Avenir", size: 13)
    } else {
        cell.waitTimeLabel.text = "\(ride.waitTime!)m"
        cell.timeBackgroundView.backgroundColor = getColorFromNumber(ride.waitTime!.toInt()!)
        cell.waitTimeLabel.font = UIFont(name: "Avenir", size: 17)
    }

    AsyncImageLoader.sharedLoader().cancelLoadingURL(cell.rideImageView.imageURL)
    cell.rideImageView.image = UIImage(named: "Unloaded")
    cell.rideImageView.imageURL = NSURL(string: ride.rideImageSmall!)

    return cell
}

请检查您是否提供了正确的 class 名称(RideCell),填写了正确的模块(您的目标),最后是故事板中的标识符。如果没问题,请分享您的故事板 tableView 单元格的 SS。

希望对您有所帮助

如果您没有使用 UITableViewController,请检查是否添加了以下扩展。

class XYZViewController: UIViewController, UITableViewDataSource, UITableViewDelegate,UISearchBarDelegate, UISearchDisplayDelegate, UISearchResultsUpdating
{

或勾选此 Tutorial。它可能会帮助您解决此错误。

请检查您的委托是否已在 viewDidLoad 中正确设置,并且您是否正在继承 UITableView 的委托方法和搜索功能,如下所示:

class YourClass: UIViewController, UITableViewDelegate, UITableViewDataSource {

    func viewDidLoad() {
       tableView.delegate = self
       tableView.dataSource = self
    }

}

并对搜索栏委托和数据源执行相同的操作。更多关于 here.

它显示为 nil,因为没有 RideCell 类型的 UItableViewCell。您必须创建一个新的 RideCell.swift,它将成为 UITableViewCell 的子类,然后将其与 tableView 的单元格相关联,然后继续。

发现了一个非常简单的问题解决方案。不得不改变这个:

var cell = tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell

对此:

var cell = self.tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell

您在对话中看到 fatal errornil 条消息的可能性有几种。

可能性 #1: 确保你有一个名为 RideTableViewCell.swiftUITableViewCell 的子class。 要创建 UITableViewCell 的子class,只需按照以下步骤操作即可。

  1. Right-Click 在您的项目名称上并创建 New File... 项目导航器
  2. iOS->源创建Cocoa触摸Class
  3. 在选项对话框子中class 字段类型UITableViewCell
  4. 我相信您已经有一个自定义 XIB 文件,如果没有,请检查同时创建 XIB 文件
  5. 确保在 Attribute Inspector
  6. 中输入 XIB 标识符

  1. viewDidLoad() 函数中注册您的单元格 class,如下所示:

    let nibCell = UINib(nibName: "RideTableViewCell", bundle: nil) self.tableView.registerNib(nibPosts, forCellReuseIdentifier: "RideCell")

  2. 像这样在 cellForRowAtIndexPath 中注册您的自定义单元格:

    let cell: RideTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("RideCell", forIndexPath: indexPath) as! RideTableViewCell


可能性 #2: 也许当您创建自定义 XIB 时,您没有告诉它 class 它属于哪个。要设置 XIB 的 class,请按照以下步骤操作。

  1. Project Navigator
  2. 中单击您的 .xib 文件
  3. 转到您手机的 身份检查器 并确保 RideTableViewCell 在那里。

如有任何问题请评论。干杯!

确保您在下面的代码中填写了正确的参数。

private let cellReuseIdentifier = "MyCell"

tableView.registerNib(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: cellReuseIdentifier)