gpt4 book ai didi

ios - heightForRowAtIndexPath 中的线程问题

转载 作者:行者123 更新时间:2023-11-28 18:10:02 25 4
gpt4 key购买 nike

我在 iOS 应用程序中遇到线程问题。这是一个已经发展了几年的大型应用程序。 (我是这个项目的许多贡献者之一,并且只对它的某些部分有深刻的理解)。

在某些情况下,应用会进行后台刷新,从而触发 tableview 委托(delegate)方法。有时这会导致以下异常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!'

我已经深入研究了这个问题,并确定在后台刷新期间,有些情况下 TableView 委托(delegate)方法不会从主线程调用。

因此,我可以在 heightForRowAtIndexPath 内部检查我是否在主线程上。

如果不在主线程上,我可以调用 performSelectorOnMainThread 来尝试获取单元格高度,唯一的问题是 heightForRowAtIndexPath 在选择器返回之前返回,因此我的单元格高度将为零。所以,这是先有鸡先有蛋的情况。如何强制调用 heightForRowAtIndexPath 中的主线程并确保它不会在 performSelectorOnMainThread 完成之前返回?或者这甚至可能吗?谢谢!

最佳答案

您可以为此使用 GCD 实现后台线程,您无需手动管理数据。GCD 将为您执行所有操作。

Here is a piece of code

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

//// DO some Background Processing Like Data Fetching
dispatch_async(dispatch_get_main_queue(), ^{
// Do some UIUpdates in your case call TableView Datasource
[yourtable reloaddata];
});
});

swift :

DispatchQueue.global(qos: .default).async {
//// Do background tasks Like Data Fetching
DispatchQueue.main.async {
// do UI related tasks

}
}

关于ios - heightForRowAtIndexPath 中的线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28081360/

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