我想加载一些已经存储在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) }
}
执行此功能后,当我手动重新加载数据时,它将显示。
答案 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的工作原理。