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

自定义UITableView在模拟器中无法加载JSON文件数据的问题求助

问题排查及解决方法

问题由多个独立错误共同导致,按优先级修复如下:

1. JSON格式不合法(最直接的解析失败原因)

你提供的JSON样本存在3处语法错误:

  • albums数组最后一个元素末尾多了多余的逗号
  • playlists数组没有闭合的]
  • 整个根对象没有闭合的}
    修复后的合法JSON样例如下:
{
  "albums": [
    {
      "title": "The Impossible Kid",
      "id": "0",
      "imageUrl": "https://showmusic-stack-showmusicimagese9e4bdae-lfk59pk2d0j2.s3.eu-central-1.amazonaws.com/albums/0.jpg"
    },
    {
      "id": "1",
      "title": "Funeral",
      "imageUrl": "https://showmusic-stack-showmusicimagese9e4bdae-lfk59pk2d0j2.s3.eu-central-1.amazonaws.com/albums/1.jpg"
    }
  ],
  "playlists": [
    {
      "title": "Favorites",
      "albums": [
        "1",
        "8",
        "10",
        "12",
        "2"
      ],
      "id": "0"
    },
    {
      "title": "To Check Out",
      "albums": [
        "3",
        "14",
        "18",
        "0",
        "29"
      ],
      "id": "1"
    }
  ]
}

2. UITableView未设置布局约束(解析成功也看不到表格的原因)

你通过代码创建的UITableView只添加到了父视图,没有设置尺寸和位置,默认frame为zero,界面上不会显示。需要在viewDidLoad中添加约束,修改后的viewDidLoad代码如下:

override func viewDidLoad() {
    super.viewDidLoad()
   
    view.addSubview(tableView)
    tableView.delegate = self
    tableView.dataSource = self
    // 新增自动布局约束
    tableView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
        tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        tableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
    ])

    parseJson()
}

3. 可选排查点

  • 确认JSON文件data (1).json已经被正确添加到项目的Target成员中,拖入文件时需要勾选「Copy items if needed」和对应应用Target的勾选框,否则Bundle.main.path会返回空直接终止解析
  • 你当前的错误日志只打印了error的基础描述,建议在调试阶段补充更明确的错误提示,方便快速定位:
private func parseJson(){
    guard let path = Bundle.main.path(forResource: "data (1)", ofType: "json") else {
        print("JSON文件未找到,请检查文件名和Target设置")
        return
    }
    
    let url = URL(fileURLWithPath: path)
    do{
        let jsonData = try Data(contentsOf: url)
        let userData = try JSONDecoder().decode(UserData.self, from: jsonData)
        albums = userData.albums
        playlists = userData.playlists
        print("解析成功,albums数量:\(albums.count)")
        tableView.reloadData()
    } catch{
        print("JSON解析错误:\(error.localizedDescription),详细信息:\(error)")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:45:01