这是搜索应用
  
  应用运行前没有错误!


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)


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

最佳答案

我猜这行是造成您麻烦的原因:

cell = tableView.dequeueReusableCellWithIdentifier("SpotListCell")!

看来您的表视图无法为您创建SpotListCell,并且由于添加了!,因此无论是否为nil,都强制编译器为您提供值。

在下一行中,您然后说:

if(cell.isEqual(NSNull))

但是单元格是nil,因此您不能要求任何内容(此外... NSNull可能不是您要的内容)。

编辑:更新了我的答案

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


给您的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
}


看看是否更好(并且我还没有使用编译器进行检查,所以可能会有错误...我确定编译器会告诉您:))

希望对您有帮助。

10-08 07:45