即使将数据设置为它,集合视图数据也不会更新Swift 4

时间:2018-11-22 09:46:08

标签: swift uicollectionview

在我的CollectionViewController内部,我有一个方法来获取像这样的数据

func fetchData(){
    let newsUrl = "http://api.meroschool.com/school/GetArticles?secretkey=1234&schoolCode=AA36&classId=ClassId000000011&pageNumber=1&type=Activities"

    guard let url = URL(string: newsUrl) else {
        return
    }

    URLSession.shared.dataTask(with: url){(data, response, err) in

        guard let data = data else {return}

        do{
            let newsResponse = try JSONDecoder().decode(NewsResponse.self, from: data)
            DispatchQueue.main.async {
                self.newsList = newsResponse.newsList
                print("count", self.newsList?.count)
            }

        }catch let error{
            print("JSON Error", error)
        }
    }.resume()
}

我已经设置了 ViewController 的所有设置,以设置动态单元格,并且在设置虚拟数据时可以使用。但是使用上述方法,即使将数据设置为 newsList ,也不会更新ViewController。

网络中某些问题的答案说,需要在主线程中设置数据,因此我将数据设置为类似。

DispatchQueue.main.async {
                self.newsList = newsResponse.newsList
                print("count", self.newsList?.count)
            }

但不为我工作。什么是设置/更新从API加载的数据以便CollectionViewController更新的正确方法。

1 个答案:

答案 0 :(得分:3)

集合视图不知道您正在更新基础数据源。因此,您需要通过调用reloadData()

明确声明
DispatchQueue.main.async { [weak self] in 
                self?.newsList = newsResponse.newsList
                self?.yourCollectioView.reloadData()
            }