在我的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更新的正确方法。
答案 0 :(得分:3)
集合视图不知道您正在更新基础数据源。因此,您需要通过调用reloadData()
DispatchQueue.main.async { [weak self] in
self?.newsList = newsResponse.newsList
self?.yourCollectioView.reloadData()
}