这是搜索应用
应用运行前没有错误!
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
}
看看是否更好(并且我还没有使用编译器进行检查,所以可能会有错误...我确定编译器会告诉您:))
希望对您有帮助。