【问题标题】:UITableViewCell super class property returning nil when set from UITableView从 UITableView 设置时,UITableViewCell 超类属性返回 nil
【发布时间】:2018-08-24 14:23:13
【问题描述】:

我在这方面花了很多时间。当从 tableView 设置属性时,UITableViewCell 的主/超类的属性 (isSender) 始终返回 nil:

这是主单元类:

   class MasterTableViewCell: UITableViewCell {

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

    var isSender:Bool!

    override func awakeFromNib() {
// code here
    }

这是 Cell 子类:

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 总是返回 nil

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

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

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

【问题讨论】:

  • 所以它总是打印false?
  • 正确,isSender 总是返回 nil,因此它打印“false”。但是,我知道 isEqual(在设置它的 tableView 方法中)返回 true。
  • 您正在评估 if isSender == true 内部 awakeFromNib() ... 这发生在您执行 cell.isSender = isEqual 之前。
  • 你能在cell.isSender = isEqual之后打印isSender
  • DonMag - 是的,如果我在 MasterTableViewCell 中添加一个类方法以在 tableView 的 conigureCell 中设置 isSender,我会正确设置 Bool。谢谢!

标签: ios swift uitableview subclass


【解决方案1】:

根据 OP 的评论...

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

【讨论】:

    【解决方案2】:

    在您的保护声明中,您应该修复 else 情况:

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

    【讨论】:

    • 我认为应用程序会在return VideoPostTableViewCell() 崩溃,作者没有提到它。
    • 为了更安全,我已将其更改为崩溃
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2021-01-22
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多