UITableViewCell super class 属性 从 UITableView 设置时返回 nil

UITableViewCell super class property returning nil when set from UITableView

我为此浪费了很多时间。当从 tableView 设置 属性 时,UITableViewCell 的 master/super class 的 属性 (isSender) 总是返回 nil:

这里是主 Cell Class:

   class MasterTableViewCell: UITableViewCell {

        @IBOutlet weak var userProfileImage:UIImageView!
        @IBOutlet weak var postTextLabel:UILabel!

    var isSender:Bool!

    override func awakeFromNib() {
// code here
    }

这是 Cell Subclass:

class VideoPostTableViewCell: MasterTableViewCell {

    @IBOutlet weak var playButton: UIButton!



    override func awakeFromNib() {
    super.awakeFromNib()



    if isSender == true {
        print("true")
    }
    else {
        print("false")
    }

这是 tableView 方法:

func configureCell(indexPath: IndexPath) -> UITableViewCell {

        guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
            return UITableViewCell()}

        let x = post.userID
        let y = user?.uid
        let isEqual = (x == y)
        cell.isSender = isEqual
        return cell

isSender总是returnsnil

注意:直接在VideoPostTableViewCell中设置isSender时,也会返回nil。此外,当我在 let isEqual = (x == y) 处放置一个断点时, isEqual returns true

最后,VideoPostTableViewCellMasterTableViewCell中的其他属性都使用tableView中的相同方法正确设置。为了减少代码,我将它们排除在外。

非常感谢任何帮助。谢谢!

在你的 guard 声明中,你应该修正 else 的情况:

guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
        fatalError("Misconfigured cell type, VideoPostTableViewCell!")
}

根据 OP 的评论...

if isSender == true 的评估发生在 awakeFromNib() 内部,但发生在 之前 执行cell.isSender = isEqual.