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

Swift 4中UITableView无法显示JSON数据问题求助

解决UITableView无法展示JSON数据的问题

看起来你已经成功拿到JSON数据(终端能正常打印),但表格就是不显示内容,我帮你梳理下几个关键问题,逐个解决就能搞定:

1. 遗漏UITableViewDataSource协议

你的ViewController只声明了UITableViewDelegate,但表格核心的数据源方法(numberOfRowsInSection、cellForRowAt)属于UITableViewDataSource协议,必须同时遵守这个协议,系统才会调用这些方法。修改类声明:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

2. 确保TableView的Delegate/DataSource已绑定

如果是用Storyboard创建的tableView,记得在Storyboard里把tableView的delegate和dataSource拖拽关联到ViewController上;如果是代码创建的tableView,要在viewDidLoad里手动设置:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.delegate = self
    self.tableView.dataSource = self
    downloadJSON()
    // 这里的reloadData可以删掉,因为异步请求还没完成,arrRes此时是空的
    // self.tableView.reloadData()
}

3. 异步回调中确保主线程更新UI

虽然Alamofire的responseJSON默认在主线程执行回调,但为了避免特殊情况,更新UI的操作最好明确放在主线程:

if self.arrRes.count > 0 {
    print("Table Updating")
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

4. 修复截断的cell配置代码+避免强制转换崩溃

你的cellForRowAt代码最后截断了,而且直接用as!强制转换容易因为字段缺失/类型不匹配崩溃,改成可选绑定更安全:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    let dict = self.arrRes[indexPath.row]
    
    // 用可选绑定处理字段,避免崩溃
    if let fullName = dict["Full_Name"] as? String {
        cell.name.text = fullName
    }
    if let club = dict["Club"] as? String {
        cell.club.text = club
    }
    return cell
}

5. 检查TableViewCell的配置

最后确认一下:你的TableViewCell在Storyboard里的标识符是cell,并且name、club这两个UILabel已经正确关联到cell类的IBOutlet上——如果控件没绑定,就算数据源正确,界面也不会显示内容。

按上面的步骤修改后,表格应该就能正常展示数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:40