You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他视图控制器跳转至嵌入导航控制器的TableView并解决cell复用报错

问题原因

你当前通过AncientHeritageTableViewController()直接纯代码初始化表格控制器实例,但是该控制器的UITableView在调用dequeueReusableCell(withIdentifier: "datacell")方法获取cell时,找不到对应datacell标识的cell注册信息,就会触发这个报错。

解决方案

根据你项目的开发方式选择对应处理方案即可:

方案1:你的AncientHeritageTableViewController是在Storyboard中定义的(包括原型cell已经在Storyboard里设置了datacell复用标识)

你不能直接通过类名初始化控制器,需要从Storyboard中加载实例:

  1. 打开对应的Storyboard,选中AncientHeritageTableViewController,在身份检查器面板给它设置Storyboard ID,例如设为AncientHeritageTableVC
  2. 把跳转方法的代码替换为以下内容:
@objc private func goToHeritageSelection() {
    // 替换Main为你的Storyboard文件名(不需要带.storyboard后缀)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let vc = storyboard.instantiateViewController(withIdentifier: "AncientHeritageTableVC") as? AncientHeritageTableViewController else {
        return
    }
    // 如果需要跳转后保留导航栏,就把控制器包在UINavigationController里
    let nav = UINavigationController(rootViewController: vc)
    nav.modalPresentationStyle = .fullScreen
    present(nav, animated: true, completion: nil)
}

方案2:你的AncientHeritageTableViewController是纯代码开发,没有用到Storyboard

你需要在AncientHeritageTableViewController的viewDidLoad方法中手动注册cell:

  • 如果用系统默认UITableViewCell:
// 写在AncientHeritageTableViewController的viewDidLoad中
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "datacell")
  • 如果用自定义的cell类(例如类名为DataCell):
tableView.register(DataCell.self, forCellReuseIdentifier: "datacell")
  • 如果用Xib自定义cell:
tableView.register(UINib(nibName: "DataCell", bundle: nil), forCellReuseIdentifier: "datacell")

内容的提问来源于stack exchange,提问作者Benny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:24:01