UITableView 奇怪的 reloadData 问题

Posted

技术标签:

【中文标题】UITableView 奇怪的 reloadData 问题【英文标题】:UITableView weird reloadData issue 【发布时间】:2014-01-20 08:29:26 【问题描述】:

我陷入了一个非常奇怪的问题,他们正在做的是调用NSURLConnection sendAsynchronousRequest,我在其中重新加载 tableView,它没有任何问题。当 em 在收到请求响应时站在同一个 ViewController 上时,这种情况可以正常工作。当我调用 sendAsynchronousRequest 并从该 ViewController 移动然后在请求给出响应之前返回到它时,就会出现问题。这次 TableView reloadData 被调用,但在视图上没有做任何事情。我在这个dispatch_async(dispatch_get_main_queue(), ^); 中调用reloadData,让它在mainThread 上运行。

在这方面的任何帮助都会很棒。

编辑 1:

这是我到目前为止所获得的。当我启动 NSURLConnection asyncRequest 时,它会保留对当前时间的 tableView 和数组的引用。但是当我从该视图导航然后返回时视图被重新初始化,因此 tableView 和数组有新的引用。因此,当 asyncRequest 调用 tableView ReloadData 时,它会为旧引用的 tableView 而不是现在可见的 tableView 调用 reload,因此不会重新加载 tableView...希望现在您能提供帮助。

【问题讨论】:

你有没有设置断点并检查是否有对 dispatch_asyn 和 cellforrows 的 poper 调用? 看起来您正在重新加载一个 tableview 并显示另一个。 它调用numberOfRowsInSection但不调用cellForRowAtIndexPath.. 我的 ViewController 中只有一个 UITableView 当它调用numberOfRowsInSection 时号码是否正确?另外,reloadData 是在异步线程还是主线程上调用的? 【参考方案1】:

与其在主线程上重新加载 tableview,不如在获取数据并解析数据后尝试重新加载它。在视图之间切换可能会导致您的 tableview 在数据来自服务器之前重新加载导致空白 tableview,这是由于在主线程上调用某些方法引起的。

编辑:尝试只在 viewdidload 中初始化 tableview 并在从服务器获得响应之后并在其中加载数据之前初始化数组。

【讨论】:

实际上是在 asyncRequest 中上传数据而不是下载数据……一旦数据上传,我必须重新加载 tableView…… 好的,这样你就可以在数据上传后重新加载表格视图,即。成功响应来自服务器。 是的,这就是他们在做什么......在请求成功或失败后,我重新加载 tableView,它在站在同一个视图上时工作正常,但是当我更改视图控制器并返回该视图时会出现问题 在viewwillappear中初始化数组可能会出现 那么解决这个问题的方法是什么..?我必须使用该初始化来显示单元格的内容

以上是关于UITableView 奇怪的 reloadData 问题的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 分组部分~ UITableView 下方的奇怪白线(带图像)

在 UITableView 中显示单元格的奇怪问题

奇怪的行为 UIActionSheet + UITableView:行消失

UITableView 滚动时奇怪的布局行为变化

UITableView 奇怪的 reloadData 问题

使用 UITableView 的奇怪崩溃