【问题标题】:IBOutlet is still nil after trying every suggestion found尝试找到的每个建议后,IBOutlet 仍然为零
【发布时间】:2020-04-29 10:47:04
【问题描述】:

我已经阅读了关于 SO 的“所有”步骤,但无法修复我在 TableViewCell.xib 中的 IBOutlets 仍然为 nil 并且永远不会调用 awakeFromNib() 的错误。

错误


productTitle.text = item?.product.description

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
 //item?.product.description is not nil

我尝试过的:

  • 清理构建文件夹
  • 删除派生数据文件夹
  • 从头开始创建了一个全新的 Xib 和 .swift 类(在第一次出现错误之后)
  • 在 CartViewController 的 viewWillAppear 中添加了 _ = self.view
  • 尝试向其他 XIB 添加新标签以检查是否发生错误 - 它确实
  • 在 XIB 中,验证:
  • 插座已连接(多次这样做)
  • 自定义 class= CartProductCell
  • 文件的所有者 = CartProductCell
  • 重用标识符 = CartProductCell
  • 在 Storyboard 中,验证:
  • 单元格 class= CartProductCell
  • 重用标识符 = CartProductCell

我的手机:

class CartProductCell: UITableViewCell {

    @IBOutlet weak var productTitle: UILabel!

    override func awakeFromNib() {
        print("awaken")
    }

    var item: orderItem? {
        didSet {

            productTitle.text = item?.product.description
        }
    }
}

出队:

class CartViewController: UITableViewController {


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let item = sections[indexPath.section][indexPath.row]   
        let cell = tableView.dequeueReusableCell(withIdentifier: "CartProductCell", for: indexPath ) as! CartProductCell
        cell.item = item
        return cell

    }
}

实例化 ViewController

extension UIViewController {
    @objc func viewCart() {
        if Cart.sharedInstance.order.items.count == 0 {
            if let cartVC = storyboard?.instantiateViewController(withIdentifier: "EmptyCart") {
                let cartNavigationController = UINavigationController(rootViewController: cartVC)
                self.present(cartNavigationController, animated: true)
            }
        } else {
            if let cartVC = storyboard?.instantiateViewController(withIdentifier: "Cart") as? CartViewController {
                let cartNavigationController = UINavigationController(rootViewController: cartVC)
                self.present(cartNavigationController, animated: true)
            }
        }
    }
}

更新

  • XIB 用于 UTTableViewCell,它是通过故事板标识符注册的
  • 插座是通过从标签拖动到代码来连接的,而不是在文件的所有者中

有什么线索吗?

【问题讨论】:

  • 当您说出口在xib中连接时,您的意思是它们已连接到File's Owner?如果是这样,我很确定这不是为 tableviewcell 做的方法。相反,右键单击 xib 中的实际单元实例并将它们连接到那里。如果没有看到您的 xib 内容,很难确定。
  • 你是如何注册小区的?
  • 您使用XIB作为Cell的权利,您是否将CartProductCell注册到TableView?
  • 用答案和一些截图更新了问题。感谢您的努力!
  • 您使用的不是来自 xib 的单元格的界面版本,而是来自情节提要。因此它没有出口链接。

标签: ios swift xcode


【解决方案1】:

@Larme 在评论中提供了这里的答案。

问题是我在故事板 tableViewController 和 cell.XIB 中有一个原型单元格,它具有相同的标识符。因此它使用了故事板中的单元格,而不是我的代码所在的 XIB。

您使用的不是来自 xib 的单元格的界面版本,而是来自情节提要。因此它没有出口链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 2014-08-13
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多