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
相关产品推荐
相关产品推荐

