TableViewCell Nib error: loaded the nib but the view outlet was not set

TableViewCell Nib error: loaded the nib but the view outlet was not set

正在尝试创建一个 tableView 单元格 xib,但我遇到了错误 "loaded the nib but the view outlet was not set"

我读过很多帖子,大多数人说将 "view" 从文件所有者拖到 IB 视图。

但是,如果您从图像中注意到,我没有 "view" 作为选项。我重新创建了一个具有相同结果的 xib。可能是 Swift 4.2 中的新内容。

任何帮助都是巨大的。

class VersionTVCell: UITableViewCell {

    @IBOutlet weak var  versionNumber: UILabel!
    @IBOutlet weak var  versionDetail: UILabel!
    @IBOutlet weak var  versionDate: UILabel!
}


class VersionTVC: UITableViewController {

    fileprivate var versions: Array<VersionModel> = [VersionModel]()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.versions = AppDelegate.getRLDatabase().getVersion()

        tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")

        tableView.rowHeight = UITableView.automaticDimension
        tableView.estimatedRowHeight = 70
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "VersionCell", for: indexPath) as! VersionTVCell

        cell.versionNumber.text              =   self.versions[(indexPath as NSIndexPath).row].versionNumber
        cell.versionDetail.text              =   self.versions[(indexPath as NSIndexPath).row].versionDetail
        cell.versionDate.text                =   self.versions[(indexPath as NSIndexPath).row].versionDate

        return cell
    }

    override func numberOfSections(in tableView: UITableView) -> Int {

        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return self.versions.count
    }
}

下面是两个屏幕截图,第一个来自单元格,第二个来自文件所有者。

我也试过从文件所有者链接到标签。没有帮助。

编辑: 添加我的 addSubView 函数:

@objc func loadVersions() {

    let newSubView = AddSubView.toVersions.getView()
    let blackBackground = UIView(frame: CGRect(x: 0, y: 65, width: self.view.frame.width, height: self.view.frame.height))
    blackBackground.backgroundColor = UIColor.black.withAlphaComponent( 0.7)

    UIView.transition(with: self.view, duration: 0.3, options: UIView.AnimationOptions.transitionCrossDissolve,
                      animations: {self.view.addSubview(self.backgroundView)}, completion: nil)

    newSubView.frame = CGRect(x: 0, y: (self.view.frame.height) * 0.1, width: (self.view.frame.width) * 0.9, height: (self.view.frame.height) * 0.8)
    newSubView.layer.borderWidth = 1
    newSubView.layer.borderColor = UIColor.defaultDialogBorderColor().cgColor
    newSubView.layer.cornerRadius = 8.0
    newSubView.clipsToBounds = true
    self.view.addSubview(newSubView)
}

据我了解,代码中的所有内容都是正确的,因此请应用一些步骤。

1) 确保 Cell 的 class 名称分配正确。

2) 使用此命令清理代码 Shift + option + command + k.

3) 如果以上步骤没有成功。从 tableView 中移除 delegate 和 dataSource Outlets UI 并在此行之后手动写入。

tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()

我试过你的代码,它工作正常。

确保您没有将 UITableViewCell class 中的 VersionTVCell 分配给文件所有者并且没有将 @IBOutlet 连接到 xib

文件所有者连接检查器应该类似于下图

此外,尝试删除并重新连接 @IBOutlet

测试示例