在xib中设计的自定义UITableViewCell有nil

时间:2016-10-14 07:19:38

标签: swift uitableview

我曾经在主故事板中设计自定义单元格,一切都运行良好,直到我尝试在外部“xib”文件中设计它。
我发现设计,设置约束等更容易。 /> 显然,两种方式都有一个UITableViewCell类。
我为新的xib做了所有新的IBOutlets,Xcode没有显示任何错误,一切看起来很好,并且必须工作得很好。

但是,派对结束了

  

致命错误:在解包可选值时意外发现nil

<{1}}

上的

self.photo.image = photo

控制器文件包含所有内容:

class CellForMessages: UITableViewCell {
@IBOutlet weak var photo: UIImageView!
@IBOutlet weak var name: UILabel!
@IBOutlet weak var surname: UILabel!
@IBOutlet weak var count: UILabel!

override func prepareForReuse() {

    self.photo = nil
    self.name.text = nil
    self.surname.text = nil
    self.count.text = nil
}

func fillWithContent(photo: UIImage, name: String, surname: String, count: Int) {
    self.photo.image = photo
    self.name.text = name
    self.surname.text = surname
    self.count.text = String(count)
}

我甚至试图添加这段代码,但是有些人告诉我没有必要并且可以删除smth,但是我试过并且错误仍然存​​在。

let cell = tableView.dequeueReusableCell(withIdentifier: "messagesProfileCell", for: indexPath) as! CellForMessages
cell.fillWithContent(photo: image!, name: self.profiles[indexPath.item].userName!, surname: profiles[indexPath.item].userSurname!, count: count)

所有商店都是最新的,并且设置了主要的Storyboard标识符。

我缺少什么?
我不想回归旧的细胞设计方式。

感谢!!!

1 个答案:

答案 0 :(得分:0)

您正在UIImageView覆盖XIB中文件所有者加载的self.photo = UIImageView()。您应该将imageView的图像设置为nil。

@IBOutlet weak var photo: UIImageView?
@IBOutlet weak var name: UILabel?
@IBOutlet weak var surname: UILabel?
@IBOutlet weak var count: UILabel?

override func prepareForReuse() {

    super.prepareForReuse()

    self.photo?.image = nil
    self.name?.text = nil
    self.surname?.text = nil
    self.count?.text = nil
}

您可以将?添加到商店的末尾以使其成为可选项,因此,如果其中一个(无论出于何种原因)为零,则不会崩溃。这意味着在使用任何商店时,您必须在名称后使用?,例如self.photo?.image = nil