为什么我的串行调度不起作用?
Why is my serial dispatch not working?
我想加载一些已经存储在 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) }
}
当我在这个函数执行后手动重新加载数据时,它出现了。
下面的代码块在后台线程上执行
queue.sync {}
并且集合视图是主线程的一部分,或者 UI 必须是 handled/updated 来自 main 线程只有.
您可以尝试如下方式重新加载集合视图:
DispatchQueue.main.async { // async OR sync as you want
self.collectionView?.reloadData()
}
这对我有用:
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 的工作原理才能得到它。
我想加载一些已经存储在 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) }
}
当我在这个函数执行后手动重新加载数据时,它出现了。
下面的代码块在后台线程上执行
queue.sync {}
并且集合视图是主线程的一部分,或者 UI 必须是 handled/updated 来自 main 线程只有.
您可以尝试如下方式重新加载集合视图:
DispatchQueue.main.async { // async OR sync as you want
self.collectionView?.reloadData()
}
这对我有用:
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 的工作原理才能得到它。