gpt4 book ai didi

ios - UITableView的reloadData有时不会调用numberOfRowsInSection

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:02 25 4
gpt4 key购买 nike

[tableView reloadData] 不调用 numberOfRowsInSection:(NSInteger)section

如果我看到这样的问题,我会在 stackoverflow 中写什么作为答案:

  • 确保 delegate 和 dataSource 完美连接。
  • 以防万一检查它是否从主线程调用它。

在提问之前,我尝试了我的答案。

我将以下行放在我的 MyTableView 类中(从 UITableView 扩展)

- (void)reloadData{
NSLog(@"MyTableView (reloadData) self.dataSource: %@, delegate: %@, isMainThread: %d",self.dataSource,self.delegate,[NSThread isMainThread]);

[super reloadData];

[self.delegate performSelector:@selector(tableReloaded:) withObject:self];
}

我看到它是从主线程和数据源调用的,委托(delegate)永远不会为 nil。

我不好奇为什么 tableView 不调用 cellForRow,因为它首先必须调用 numberOfRows 来查看结果是否 > 0。但是,它也不会调用 numberOfRows...

有什么想法吗? tableView 放弃调用 numberOfRows 函数的原因可能是什么?

更新:我在 reloadData 函数中添加了新行以打印 FullStack 以查看它是否是从 tableView 自己的函数中调用的。结果:它们是在 tableView 之外调用的,因此不应有任何意外行为。

更新 2:“有时”:在我的用户开始说“有时”他们看不到表中的变化后,我发现了这个问题。之后,我尝试连续点击 XCode 中的运行按钮,直到应用程序打开并显示此错误。 (我 30% 的运行百分比显示此错误)。当它发生时,直到我重新启动应用程序,reloadData 再也不会工作。

更新 3:我放了 self.dataSource==myExpectedViewController[self.dataSource tableView:self numberOfRowsInSection:0] 来查看是否甚至代表不为零,也许他们被克隆等。 . 结果为 True 且 numberOfRows 正确返回>0。所以代表们是正确的,我有比零更多的项目。

更新4:我尝试使用新的 UITableView(删除我的自定义 UITableView),我得到了相同的结果。

更新5:我在屏幕上放置了一个按钮,用于重新创建表格并设置其代表。每当问题中的问题发生时,我都会按下此按钮,一切都会开始正常运行。所以,一定有什么东西破坏了 UITableView 的内部结构,它使对 reloadData 的每次调用都无效,但我仍然找不到它。

最佳答案

已编辑:我试图重现该问题并发现,当我在具有此 TableView 的当前 View Controller 上呈现另一个 View Controller 时。然后 1. 尝试用一些数据重新加载此 tableview 和 2. 同时关闭位于我当前 View Controller 顶部的 viewcontroller 和动画,然后由于在此期间, TableView 不可见,因此不会重新加载。

要解决,您可以在那里设置延迟或使用该动画的完成 block 来重新加载表格。

否则问题可能与线程有关,UIElements 预计仅在主线程上更新。

在API调用等过程中,我们进入了其他线程,而在更新UIElement之前,我们大多忽略了检查我们是否在主线程上。

您应该使用 DispatchQueue.main.async{yourTable.reloadData()} 在主线程中调用 yourTable.reloadData() 并确保它在主线程中被调用。

关于ios - UITableView的reloadData有时不会调用numberOfRowsInSection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16634340/

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