首页 > 解决方案 > 为什么我的串行调度不起作用?

问题描述

我想加载一些已经存储在 Core Data 中的天气数据。显然,我希望集合视图在加载数据后自行更新。有人可以告诉我,为什么这段代码不起作用?

let context = PersistanceService.context
let fetchRequest: NSFetchRequest<Weather> = Weather.fetchRequest()
let queue = DispatchQueue(label: "loadanddisplay")
queue.sync {
    do {
        let result = try context.fetch(fetchRequest)
        self.weatherArray = result
        self.collectionView?.reloadData()

    } catch let err { print(err) }
}  

当我在此功能执行后手动重新加载数据时,它会显示出来。

标签: swiftcore-datasynchronizationgrand-central-dispatchdispatch

解决方案


下面的代码块在后台线程上执行

queue.sync {}

并且集合视图是主线程的一部分,或者 UI 必须仅从线程处理/更新。

您可以尝试以下方法来重新加载集合视图:

DispatchQueue.main.async { // async OR sync as you want
        self.collectionView?.reloadData()
    }

推荐阅读