为什么我的串行分派不起作用?

时间:2018-08-23 15:17:16

标签: swift core-data synchronization grand-central-dispatch dispatch

我想加载一些已经存储在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) }
}  

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

2 个答案:

答案 0 :(得分:0)

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

queue.sync {}

并且收集视图是主线程的一部分,或者UI只能从 main 线程处理/更新。

您可以尝试以下类似方法来重新加载收藏夹视图:

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

答案 1 :(得分:0)

这是为我完成的工作:

DispatchQueue.global(qos: .background).async {
    let context = PersistanceService.context
    let fetchRequest: NSFetchRequest<Weather> = Weather.fetchRequest()
    do {
        let result = try context.fetch(fetchRequest)
        self.weatherArray = result
    } catch let err { print(err) }

    DispatchQueue.main.async {
        self.pageControl.numberOfPages = self.weatherArray.count
        self.collectionView?.reloadData()
    }
}

请确保您正确调用此电话。我必须准备好了解GCD的工作原理。