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 下方的奇怪白线(带图像)