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

从API获取JSON填充UITableView时数据延迟显示问题求助

UITableView 数据更新延迟?教你快速解决这个问题

嘿,我一眼就看出你遇到的是什么问题了——这是iOS开发里新手常踩的坑:你更新了数据源数组,但没告诉UITableView要刷新界面!

问题根源

UITableView不会自动监听数组的变化,初始加载时它会调用数据源方法,用的是你全局数组里的默认值["2" , "2" , "3","4","5","6","7","8","9"]。等你滚动表格的时候,表格会重新请求数据,这时候才拿到了解析后的新数组,所以才会显示正确内容。

直接解决办法:更新数据后立即刷新表格

修改你的JSON解析代码,在赋值完全局数组之后,回到主线程调用tableView.reloadData()——记住,所有UI操作都必须在主线程执行,而网络请求/JSON解析一般是在后台线程跑的,所以一定要包在DispatchQueue.main.async里:

do { 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 
    if let parseJSON = json { 
        let categoryList = parseJSON["categoryList"] as? [String: Any] // 用更安全的类型转换
        if let goodTypeNames = categoryList?["goodTypeName"] as? [String] {
            Global.GlobalVariable.names = goodTypeNames 
            print(Global.GlobalVariable.names)
            // 关键:回到主线程刷新表格
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }
} catch {
    print("JSON解析出错啦:\(error)")
}

我还帮你把强制解包as!改成了可选绑定,这样能避免因为JSON格式不对导致崩溃,代码更健壮。

额外优化建议(可选但推荐)

全局变量虽然好用,但长期来看不利于代码维护,建议把数据源数组移到你的UITableView所在的ViewController里,比如:

// 在你的ViewController里声明
var categoryNames: [String] = ["2" , "2" , "3","4","5","6","7","8","9"]

之后解析数据时直接更新这个本地数组,再刷新表格,逻辑会更清晰,也更容易追踪数据变化。

最后检查数据源方法

确保你的UITableView数据源方法是正确使用新数组的,比如:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // 如果用全局数组就写Global.GlobalVariable.names.count,用本地数组就写categoryNames.count
    return Global.GlobalVariable.names.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "你的CellID", for: indexPath)
    cell.textLabel?.text = Global.GlobalVariable.names[indexPath.row]
    return cell
}

这样改完之后,你就能看到表格在解析完数据后立即更新显示新内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:43