swift - 为什么我的串行调度不起作用?
问题描述
我想加载一些已经存储在 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 必须仅从主线程处理/更新。
您可以尝试以下方法来重新加载集合视图:
DispatchQueue.main.async { // async OR sync as you want
self.collectionView?.reloadData()
}
推荐阅读
- c# - 发生模型绑定错误时,ASP.NET WebAPI 全局错误处理过滤器不起作用
- docker - 在 docker compose /bin/sh: 1: main: not found 中找不到可执行文件
- apache-spark - Spark 与 S3 的集成
- xampp - 本地主机 phpmyadmin 中的问题。使用模板缓存时出错
- c# - 从 xml 文件复制数据并粘贴到同一文件中并使用 FIle.Copy() 覆盖
- python - 如何下载带有 requests.get 的文件以获得“匹配的 url 模式”,而不是提供确切的 url
- linux - Samba(v 4.10.16) win10无法打开centos7中通过setxattr()设置扩展属性的文件(如.xlsx .pptx)
- sql - 使用 oracle apex 数据解析器从解析的 csv 文件中获取第一个标题行
- javascript - 反应 - 反应路由器 - A
可能只有一个子元素 - c# - 为什么我不能从构造函数中捕获这个异常?