尽管正确识别了单元格,但无法使标识符错误使单元格出列

时间:2017-02-21 14:12:43

标签: swift xcode uitableview

我创建了两个UITableViewCell对象(FriendsCell,AddFriendsCell),并且具有以下代码:

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

    if indexPath.row == self.selectedFriends.count {
        let cell = tableView.dequeueReusableCell(withIdentifier: "AddFriendsCell", for: indexPath) as! AddFriendsCell
        return cell

    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "FriendsCell", for: indexPath) as! FriendsCell
     ...

AddFriendsCell有一个按钮,单击该按钮时,应该转到另一个视图控制器。但是,单击时会返回记录错误的错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'unable to dequeue a cell with
identifier AddFriendsCell - must register a nib or a class for the
identifier or connect a prototype cell in a storyboard'
*** First throw call stack:

当相应的原型单元在其故事板设置中被非常清楚地标识为“AddFriendsCell”并且类型为AddFriendsCell(UITableViewCell类)时,我无法理解为什么会出现此错误

当我使用:

继续第一个dequeueReusableCell行时
tableview.register(AddFriendsCell, forCellReuseIdentifier: "AddFriendsCell")

结果是在运行时它会生成一个空白单元格来代替以前格式正确的AddTableCell。

请帮助我理解为什么在按下AddFriendsCell中的按钮时会抛出此错误,以及如何纠正它。

1 个答案:

答案 0 :(得分:1)

您需要在使用之前注册单元格。例如:

override func viewDidLoad() {
    super.viewDidLoad()

    var nib = UINib(nibName: "AddFriendsCell", bundle: nil)
    tableView.register(nib, forCellReuseIdentifier: "AddFriendsCell")

}

更新:如果您没有xib文件,请使用

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.register(AddFriendsCell.self, forCellReuseIdentifier: "AddFriendsCell")

}