gpt4 book ai didi

ios - 如何同步数据源更新与线程安全的 TableView 重新加载?

转载 作者:可可西里 更新时间:2023-11-01 01:23:42 28 4
gpt4 key购买 nike

我经常更新 TableView 数据源,需要正确同步 TableView 更新和数据源更新。你能建议在 Swift 3 中解决这个问题的正确方法吗?

ListViewModel

/// Main list viewmodel refreshing and filtering API
private func refreshCards(withIcon icon: CardIcon) {

queue.async {

Log.debug("refresh cards Started")

switch icon {

case .all:

self.loadOpenCards()
self.loadCompletedCards()

default:

self.filterOpenCards(byIcon: icon)
self.filterCompletedCards(byIcon: icon)
}

// Ask list TVC to reload table
self.listTVC?.refreshForUpdates()

Log.debug("refresh cards Finished")
}
}

ListTableViewController

func refreshForUpdates() {

DispatchQueue.main.async {

self.updateApprovalListBackgroundGraphics()

self.tableView.reloadData()

Log.debug("refresh cards Reloaded")
}
}

在此代码中,tableView.reloadData() 不会等待 View 模型刷新,因为它是在主线程上异步调度的。

最佳答案

我在这种情况下采取的一般方法是确保 View Controller 具有数据的静态副本,因此后台不会发生任何更改。

您有一个数据模型的主实例。该数据模型处理异步更新。它需要做的是通知它的监听器(比如 View Controller )它已经更新了。监听器应通过保存数据模型的副本然后刷新其 View (例如重新加载 TableView )来响应此更新。

如果主数据模型恰好在 View Controller 更新自身时发布另一个更新,这不是问题,因为 View Controller 不会处理下一次更新,直到它完成从上一个更新和 View Controller 的副本的更新数据尚未随新更新而改变。

关于ios - 如何同步数据源更新与线程安全的 TableView 重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42394847/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com