【问题标题】:Swift get json data and index out of range errorSwift 获取 json 数据和索引超出范围错误
【发布时间】:2021-03-14 12:06:22
【问题描述】:

我的问题很简单,但我找不到解决方案。当我从服务器获取 JSON 数据时,我想将数据显示到 collectionviewcell,但出现索引超出范围错误。

这是我的代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SiparislerTumAnasayfa", for: indexPath) as! SiparislerTumAnasayfa
    let url = URL(string: "https://abc/api/SiparislerTumListeler/abc")

    let session = URLSession.shared

    let task = session.dataTask(with: url!) { (data, response, error) in
        if error != nil {
            print(error)
        }
        else
        {
            if data != nil{
                do{
                    let responseJSON = try? JSONSerialization.jsonObject(with: data!, options: [])
                    if let responseJSON = responseJSON as? [String: Any] {
                        self.jsonArray = responseJSON["results"] as? [[String: Any]]

                        DispatchQueue.main.async {

                            let row = self.jsonArray![indexPath.row]
                            if let urunAdi = row["siparis_urun_adi"] as? String {
                                cell.siparisUrunAdi.text = urunAdi
                            }
                        }
                    }
                }
                catch {
                    print(error)

                }
            }
        }
    }
    task.resume()

    return cell
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.jsonArray!.count
}

[indexPath.row] 是我得到错误的地方。

【问题讨论】:

  • 你为什么要在collectionView(_:cellForItemAt:)里面做API调用?
  • 我在 viweDidload() 中试过但没有用

标签: ios arrays json swift


【解决方案1】:

可能来自响应 api 的数组数量小于 numberOfItemsInSection func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {....}

【讨论】:

    【解决方案2】:

    您需要添加代码来处理indexPath.row 大于或等于self.jsonArray.count 的情况。

    【讨论】:

    • 你的意思是“numberOfItemsInSection”吗?
    • 这也是一个重要的方法(您没有显示),但是是的,显然它告诉集合视图无论您在 JSON data 中拥有的单元格都比您多。跨度>
    • 哎哟。这真的很糟糕,在每个 cellForItem 调用中一遍又一遍地异步获取和解析相同的 JSON。移动该代码,例如到你的viewDidLoad(),所以它只运行一次。另外,请查看Codable,这样您就可以避免JSONSerialization
    • 我做了,现在我在展开可选值错误时意外发现 nil
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多