一尘不染

解析JSON后CollectionView不显示数据

swift

解析JSON之后,我将数据保存在ViewController的arraOfData中,但collectionView不会显示此数据。如果我使用静态数组,一切正常。collectionview.reloadData()无法正常工作。我认为,需要以某种方式等待解析的数据,然后尝试加载collectionView。我尝试使用refreshControler来等待数据,但是我不知道put方法“
endRefreshing”在哪里(我认为ViewDidLoad中需要startRefreshing)如果我在arraOfData中使用像didSet这样的reloadData,则会出现错误,原因是collectionView为零。在解析完相同的数据后,立即使用reloadData对我不起作用,并且有一个大的请求要告诉这个主题几个资源(文章),我觉得我在显示数据以及按什么顺序开始加载函数方面遇到了很大的问题。非常感谢。

class ViewController: UIViewController {


@IBOutlet weak var collectionView: UICollectionView!


var arraOfData = [GettingMoney]() {
    didSet {
        print("Changes: \(arraOfData.count)")
    }
}

//  let arr = ["1", "2", "3"] - test, if i use this array, collectionView display data

  override func viewDidLoad() {
    super.viewDidLoad()
    GettingMoney.fetchData()

    collectionView.dataSource = self
    collectionView.delegate = self

  }

}

extension ViewController: UICollectionViewDelegate, 
   UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return arraOfData.count
}

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCellId", for: indexPath) as? CollectionViewCell
    cell?.currentCurrency.text = "\(arraOfData[indexPath.row])"
    return cell!

  }
}

阅读 272

收藏
2020-07-07

共1个答案

一尘不染

这样

GettingMoney.fetchData()

是异步过程的标志,它不会重新加载集合,所以

func fetchData(completion:@escaping ([String]) -> ()) {
    Api.load {
      completion(arr)
    }
}

然后使用像

GettingMoney.fetchData { arr in
   self.arraOfData = arr
   DispatchQueue.main.async {
     self.collectionView.reloadData()
  }
}
2020-07-07