为 TableView 单元格设置值时出现致命错误

Fatal error when setting value for TableView Cell

我在尝试将值传递给文本标签时遇到此错误

Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value:

准备好有关此的 SO 线程后,我尝试了以下但没有成功:

  1. 打印出 photo 中的每个值并且值是正确的而不是 nil
  2. 删除并重新连接了奥特莱斯
  3. 创建了一个虚拟值 username1Label.text = "test" 和同样的错误

这是代码的简化版本:

class EventFeedCell: UITableViewCell {

@IBOutlet weak var username1Label: UILabel!
@IBOutlet weak var date1Label: UILabel!
@IBOutlet weak var photoId1Label: UILabel!

func setPhoto(_ photo:Photo) {

    username1Label.text = photo.byUsername  //I get the fatal error here
    date1Label.text = photo.date
    photoId1Label.text = photo.postId
}}

Photo 对象

class Photo {

var postId = ""
var byId = ""
var byUsername = ""
var date = ""
var url = ""
var eventId = ""

}

cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    //Get a event feed photo cell
    let cell = tableView.dequeueReusableCell(withIdentifier: EventFeedCell.eventFeedPhotoTableCell, for: indexPath) as! EventFeedCell

    //Get the photo for this row
    let photo = photos[indexPath.row]

    //Set the details for the cell
    cell.setPhoto(photo)

    return cell

}

我还能尝试什么?这是另一个有效的 TableView 单元格的精确副本(因此我在标签名称中添加了一个 1 以确保它们是唯一的)

单元格初始化后,您的标签和其他 UI 组件可能为零,因此只有当您的 UI 组件(标签等)初始化时,您才必须设置一个值,否则不要设置。在访问文本属性之前只需添加 ?。 这是 setPhoto(:) 方法的修改版本。

func setPhoto(_ photo:Photo) {

    username1Label?.text = photo.byUsername  
    date1Label?.text = photo.date
    photoId1Label?.text = photo.postId
}

需要注意的一件事是,如果您的 photoModel 属性是可选的,您必须先解包它们,然后再尝试访问。以下是您的 setPhoto(:) 方法的另一个版本,仅当您的 photoModel 具有可选属性时。

func setPhoto(_ photo:Photo) {
      // Optionally unwrap your photo properties.
     gaurd let byUserName = photo.byUsername,
      let  date = photo.date,
      let postId = photo.postId else {return}

    // Safe to proceed if all your values are set in photoModel
    username1Label?.text = byUserName  
    date1Label?.text = date
    photoId1Label?.text = postId
}