【发布时间】:2015-07-31 21:43:42
【问题描述】:
我最近尝试将UITableViewController 更改为UITableView 内的UIView。我改回这个,因为我的UISearchBar 遇到错误,因为当我点击一个键来搜索我的应用程序会因错误而崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
在这一行:
var cell = tableView.dequeueReusableCellWithIdentifier("rideCell") as! RideCell
当我切换回 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
}
【问题讨论】:
-
您需要针对
RideCell类注册单元重用标识符rideCell- 如果您使用情节提要,则通过原型单元执行此操作 -
然后仔细检查所有内容,因为异常表明
dequeueReusableCellWithIdentifier返回 nil - 这意味着单元重用标识符未注册到类。确保场景中的表格视图链接到视图控制器中的 IBOutlet。 -
我无法再告诉您您所显示的内容 - 如果该行返回 nil,那是因为该函数调用中的
tableview没有为该重用注册的类标识符。 -
您可能只需要进行更多调试 - 检查
tableView的值是否与您的 IBOutlet 相同 - 它可能是不同的表视图 -
if tableview == ...行让我相信您有多个 tableview,因此您可能将单元格排在错误的 tableview 上,或者您需要在另一个 tableview 上注册重用标识符好
标签: ios swift uitableview uisearchbar