我曾经在主故事板中设计自定义单元格,一切都运行良好,直到我尝试在外部“xib”文件中设计它。
我发现设计,设置约束等更容易。 />
显然,两种方式都有一个UITableViewCell类。
我为新的xib做了所有新的IBOutlets,Xcode没有显示任何错误,一切看起来很好,并且必须工作得很好。
但是,派对结束了
<{1}} 上的致命错误:在解包可选值时意外发现nil
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标识符。
我缺少什么?
我不想回归旧的细胞设计方式。
感谢!!!
答案 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