'意外发现nil'用于UITableView中的搜索

use*_*428 7 uitableview uisearchbar ios swift

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

fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

在这条线上:

var cell = tableView.dequeueReusableCellWithIdentifier("rideCell")  as! RideCell
Run Code Online (Sandbox Code Playgroud)

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

有人有什么建议吗?它适用于普通的表视图,就在我进行搜索时它会崩溃.标识符绝对正确.

谢谢!

编辑:

功能齐全:

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
}
Run Code Online (Sandbox Code Playgroud)

use*_*428 13

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

var cell = tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell
Run Code Online (Sandbox Code Playgroud)

对此:

var cell = self.tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell
Run Code Online (Sandbox Code Playgroud)


Far*_*had 7

有迹象表明,你看到了几个可能fatal errornil在对话框中的消息.

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

  1. 右键单击项目名称,然后在 Project Navigator中创建新文件....
  2. iOS-> Source创建Cocoa Touch Class
  3. 在选项对话框子类字段类型UITableViewCell中 在此输入图像描述
  4. 我相信你已经有了一个自定义XIB文件,如果没有,请选中同时创建XIB文件
  5. 确保在Attribute Inspector中输入XIB 标识符

在此输入图像描述

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

    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时,你没有告诉它它属于哪个类.要设置XIB类,请按照以下步骤操作.

  1. 单击Project Navigator中的.xib文件
  2. 转到您的单元格的身份检查员,并确保RideTableViewCell在那里.

在此输入图像描述

如果您有任何疑问,请发表评论.干杯!