xcode 在UITableViewCell的awakeFromNib中无法访问IBOutlet

4szc88ey  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(208)

就我所知,我已经正确地设置了一切(注册和出列)。
'致命错误:隐式展开可选值时意外发现nil:档案....机甲进入细胞.斯威夫特,第18行'
这很奇怪,因为其他做类似事情的UITableViewCells似乎工作得很好--而且在我看来是一样的。
代码失败:

class MechEntryCell: UITableViewCell {

    @IBOutlet weak var mechName: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        mechName.text = "Hello"    <<<<<<< CRASHES
    }

    func setDamageOption(_ damageOption: AdditionalDamageOption) {
        mechName.font = UIFont.boldSystemFont(ofSize: mechName.font.pointSize)
        mechName.text = damageOption.label    <<<< WORKS FINE IF ABOVE CRASH REMOVED
    }
}

该文件具有一个.xib文件,其中已正确链接了标签:

我也会注册和出列:

override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        tableView.register(UINib(nibName: MechEntryCell, bundle: nil), forCellReuseIdentifier: "MechEntryCell")
........
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tempDamageOptions.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: MechEntryCell.identifier) as? MechEntryCell {
            cell.setDamageOption(tempDamageOptions[indexPath.item])
            return cell
        }
        return UITableViewCell()
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

特别说明:当我在tableView(cellforRowAt:)方法中设置标签时,它工作得很好--所以IBOutlet最终会链接。我做错了什么?

ee7vknir

ee7vknir1#

我只想添加另一个可能很容易/偶然发生在某人身上的例子。在这个例子中,不小心把cell类放在ContentView上,(而不是应该简单地保留为UIView)。在代码中,cell的awakeFromNib被调用了两次。第一次设置了outlet,而在第二次神秘的调用中,outlet为零。

r1wp621o

r1wp621o2#

我带着解决方案羞愧地回来了。
在安装过程中,我不小心将根视图的自定义类设置为机甲入口单元的自定义类。删除这个问题就解决了。

相关问题