ios - 我可以从 API 获取日期,但是当我填充单元格时,我的计数为零
问题描述
我的服务具有以异步方式完成返回结果的方法,我可以在关闭中看到结果,但是当我从关闭中退出时,我的结果为 nil
我为此使用 Swift 5,并使用 URLSession
var categoryViewModel = CategoryViewModel()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Digital Space"
setupTableView()
bindViewModel()
}
fileprivate func bindViewModel() {
categoryViewModel.fetchCategories { (categories) in
self.categoryViewModel.categories = categories
}
}
var categories: [Category]?
mutating func fetchCategories(completion: @escaping ([Category]) -> ()) {
var this = self
Repository.getAllCategories { (result) in
switch result {
case .failure(let error):
print(error)
case .success(let categories):
this.categories = categories
completion(categories)
}
}
在绑定视图模型中,我将断点放在 self.categoryViewModel 中,我可以从 API 获取日期,但是当我退出此方法时,例如 cellForRow,我的视图模型中的类别为零。
解决方案
为了解决这个问题,你可以看到这个调用都是异步的,这个问题来自 GCD
所以要解决就像那样
迅速
fileprivate func bindViewModel() {
categoryViewModel.fetchCategories { (categories) in
self.categoryViewModel.categories = categories
DispatchQueue.Main.Async {
self.tableView.reloadData()
}
}
}
推荐阅读
- php - 如何将数据解析为具有多个字段的元框?
- google-app-engine - 防火墙/阻止 Compute Engine 仅允许来自 App Engine 的连接(灵活?)
- python - 为什么 Bcrypt 在 MySQL 上一直失败,我该如何检索哈希?
- javascript - 如何在数据表中的复杂标题上显示/隐藏列
- java - 不写java代码只用application.yml配置多个数据源是否适用
- python - 为什么我不应该将我的项目文件放在我的 venv 文件夹中?
- nginx - 为什么我的 nginx 服务器只显示我的 index.html?
- c# - 在 .NET Core 2.2 下的 System.Drawing 中找不到 Image 类
- javascript - 与 Dynamitable 库完全匹配
- php - 将 index.php 重写为空,将 other.php 重写为 other