gpt4 book ai didi

asynchronous - 从异步函数重新加载 UITable 调用

转载 作者:可可西里 更新时间:2023-11-01 00:38:10 25 4
gpt4 key购买 nike

我在 http 请求的回调函数中调用这段代码。 http 请求是用于更新应用程序数据的获取。因此,对于某些 VC,我需要重新加载 View ,回调完成更新核心数据中的所有内容。

这是我目前正在使用的代码块(在回调函数中调用)。

func reloadTopMost(){
var topMost = topMostContoller() as UIViewController
if topMost.isKindOfClass(SecondViewController){
topMost.reloadInputViews()

var svc = topMost as SecondViewController
svc.studentTable.reloadData()
svc.studentTable.setNeedsDisplay()
svc.viewDidLoad()
svc.reloadInputViews()
}else if topMost.isKindOfClass(ThirdViewController){
topMost.reloadInputViews()

var tvc = topMost as ThirdViewController
tvc.inClassTable.reloadData()
tvc.inClassTable.setNeedsDisplay()
tvc.viewDidLoad()
tvc.reloadInputViews()
}
}

如您所见,我尝试了 reloadData()、setNeedsDisplay()、viewDidLoad 和 reloadInputViews()。我从诸如 this 等问题的答案中得到的想法一。我确信 if 语句正在为每个 vc 类传递。所以我不确定为什么不重新加载 VC/表。这是因为它是在异步函数中调用的吗?

最佳答案

Is this because it is being called in an asynchronous function?

这可能是问题所在。很有可能在后台线程中调用回调。 UIKit 不是线程安全的,涉及它的所有内容都必须在主线程上运行。确保 reloadTopMost() 在主线程上运行应该可以解决问题。您可以使用 dispatch_async()这样做:

// In your callback:
dispatch_async(dispatch_get_main_queue(), {
self.reloadTopMost()
})

请注意 dispatch_async() 会立即返回。如果你需要等到重新加载完成,你可以使用 dispatch_sync() .

关于asynchronous - 从异步函数重新加载 UITable 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166824/

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