ERROR展开可选值AND dequeueReusableCellWithIdentifier(:单元格标识符)

时间:2016-06-07 07:48:27

标签: iphone xcode swift

  

这是搜索的应用

     

在应用运行之前没有错误!

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

    if(cell.isEqual(NSNull))
    {
        cell = (NSBundle.mainBundle().loadNibNamed("SpotListCell", owner: self, options: nil)[0] as? UITableViewCell)!;
    }


    if tableView == self.tableView {
        cell.textLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String
    } else {
        cell.textLabel?.text = self.filteredPosts[indexPath.row]
    }
    return cell
}
  

运行应用,搜索错误的时刻。   以下错误。

fatal error: unexpectedly found nil while unwrapping an Optional value

(LLDB)

  

哪里应该修改?   谢谢你的阅读。   注意我是韩国高中生。

1 个答案:

答案 0 :(得分:1)

这条线是造成你麻烦的原因:

cell = tableView.dequeueReusableCellWithIdentifier("SpotListCell")!

您的表视图似乎无法为您创建SpotListCell,并且因为您添加了!,您强制编译器为您提供值,无论它是nil还是if(cell.isEqual(NSNull))

然后在下一行中说:

nil

但是格式为NSNull,因此您无法提出任何问题(此外...... UITableView可能不是您正在寻找的内容。

修改:更新了我的回答

首先你应该注册Nib,以便UITableView可以使用它。

  • @IBOutlet weak var tableView: UITableView!建立一个出口并连接到:

    viewDidLoad()

  • 然后在你的contentTableView.registerNib(UINib(nibName: "SpotListCell", bundle: nil), forCellReuseIdentifier: "SpotListCell")中,您可以执行以下操作: guard let

最后你可以像这样使用你的细胞,注意override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCellWithIdentifier("SpotListCell") else { return UITableViewCell() } //Populate as you did before if tableView == self.tableView { cell.textLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String } else { cell.textLabel?.text = self.filteredPosts[indexPath.row] } return cell } 安全地解开你的细胞:

Cache-Control:max-age=0

看看是否更好(我还没有用编译器检查过它,所以可能会有错误......我确信编译器会让你知道:))

希望对你有所帮助。