我正在尝试自定义原型单元格。这是我主要故事板中的单元格。
我有一个自定义单元格类。
non-transient entity has a null id
它与同一故事板中的原型单元相关联。
只是确定,这是检查器中的自定义类名。
最后,在我的视图控制器中,我有以下扩展来实现class UserListTableViewCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var dateCreatedLabel: UILabel!
@IBOutlet weak var dateOfLastLoginLabel: UILabel!
}
协议。
UITableViewDataSource
与extension UserListViewController: UITableViewDataSource {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("userListCell", forIndexPath: indexPath) as! UserListTableViewCell
cell.nameLabel.text = users[indexPath.row].name
return cell
}
}
方法一起使用。
viewDidLoad
当我在模拟器中启动它时,override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.tableHeaderView = tableHeaderView
tableView.registerClass(UserListTableViewCell.self, forCellReuseIdentifier: "userListCell")
}
会导致运行时崩溃。在堆栈跟踪中,我的所有标签都是fatal error: unexpectedly found nil while unwrapping an Optional value
。
这里发生了什么,我该如何解决这个问题?
答案 0 :(得分:4)
故事板原型单元格会自动注册使用
与dequeueReusableCellWithIdentifier()
。如果没有可用的单元格
重用,一个新的将从原型单元格(使用initWithCoder:
)实例化,所有标签和其他元素,你
在故事板中定义。
使用
tableView.registerClass(UserListTableViewCell.self, forCellReuseIdentifier: "userListCell")
你替换原型单元的注册。现在
dequeueReusableCellWithIdentifier()
将创建一个实例
UserListTableViewCell
(使用initWithStyle:
作为@dan说)。但那里
没有连接到原型单元格,所以标签和其他元素
没有创建。在您的情况下,cell.nameLabel
是nil
,因此
访问cell.nameLabel.text
会引发异常。