将变量用于dequeueReusableCellWithIdentifier

时间:2015-11-08 20:51:45

标签: ios swift tableview

我正在构建一个包含两个相同类但具有不同标识符的单元格的表。

我正在使用分段控件来显示或。

我相信一切都在Storyboard上正确连接,

>>> run /tmp/thing.py
True 272331835 272331835
False -9223372036582443978 9223372037127107638
True 272331835 272331835
False -9223372036582443978 9223372037127107638
True 272331835 272331835
False -9223372036582443978 9223372037127107638
True 272331835 272331835
False -9223372036582443978 9223372037127107638
True 272331835 272331835
False -9223372036582443978 9223372037127107638
根据断点,

失败 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let friendRequest = self.friendRequestsToDisplay[indexPath.row] requestDirection = isAnIncomingRequest ? "IncomingRequestCell" : "OutgoingRequestCell" if let cell = tableView.dequeueReusableCellWithIdentifier(requestDirection) as? RequestCell { cell.configureCell(friendRequest, isAnIncomingRequest: isAnIncomingRequest) return cell } else { return UITableViewCell() } }

dequeueReusableCellWithIdentifier

在评论中建议的fatal error: unexpectedly found nil while unwrapping an Optional value 方法中对标识符("IncomingRequestCell""OutgoingRequestCell"进行硬编码后,似乎这些值是问题的根源。但是,它们是正确的在IB中识别各自的UITableViewCell。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果所有内容都已正确连接 - 这意味着您在IB中正确设置了reuseIdentifiers,而UITableViewCells中的UITableView是原型单元格(并且从笔尖加载 - 需要手动注册UITableViewCells),而不仅仅是使用

dequeueReusableCellWithIdentifier:forIndexPath:

答案 1 :(得分:0)

为什么要为reuseIdentifier使用全局变量并每次更新?你可以使用local var。

同时避免使用dequeueReusableCellWithIdentifier,请改用dequeueReusableCellWithIdentifier:forIndexPath:。因为它,我之前的一个项目中有一些奇怪的问题。

这是一个简单的例子,它就像一个魅力:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let identifier = (indexPath.row == 0) ? "Cell1" : "Cell2"
    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath)
    self.configureCell(cell, atIndexPath: indexPath)
    return cell
}

更新:经过调查,我们发现,问题出在自定义单元类初始化代码中。