swift - 即使在将数据设置为 Swift 4 后,Collection View 数据也不会更新

标签 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 设置了所有设置来设置动态单元格,它在我设置虚拟数据时工作。但是使用上面的方法它不会更新 ViewController,即使数据设置为 newsList

网页上的一些问题的答案说需要在主线程中设置数据,所以我设置数据。

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

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

最佳答案

Collection View 不知道您更新了基础数据源。因此,您需要通过调用 reloadData()

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

关于swift - 即使在将数据设置为 Swift 4 后,Collection View 数据也不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53428026/

相关文章:

swift - 动态 NSTouchBar 项目

ios - 单击 UICollectionCell 上的按钮执行 segue

ios - 为什么当我在 swift 3 中从图库中获取照片时, Collection View 为空?

ios - Swift - 向下滑动时如何分页

ios - 当用户向下滚动 75% 时在 uiscrollview 中自动回发

ios - 向 "Library/Application support"文件夹提供默认填充

ios:将新数据加载到 UICollectionView 中

ios - 原始 UILabel 用于透明 View ,不透明度 alpha 0.5

ios - 带有部分的 UItabelview 内的多个 UICollectionviews - swift

iOS - 根据开关值启用/禁用一组通知