关于ios:UITableView在滚动时停止渲染

UITablewView stops renderings during scrolling

简介

目前我有一个 UITableView,其中填充了自定义单元格,显示当前上传到服务器的文件的上传进度。上传过程只是使用 NSURLConnection 的标准异步方法在后台异步运行的 NSURLConnection 对象。

问题是,在滚动过程中,UITableView 或者我想 UITableview 的 UIScrollView 会阻塞整个主线程,这会导致诸如文件上传过程等重要信息直到UIScrollView 处于静止状态。

研究

现在我确实碰到了,我认为这篇文章中的问题与我的完全相同:类似问题

所以看起来整个主线程都被阻塞了。我还成功地添加了上面帖子中的计时器,即使在滚动期间也会被调用。但是......不幸的是它并没有真正解决我的情况。

问题仍然是 NSURLConnection 对象被阻塞,这意味着 NSURLConnection 删除方法:didSendBodyData

仍然没有被调用,这是我获得写入服务器的新字节数的地方等等,所以我根本无法接收数据。

有没有办法解决这个问题?我是否必须创建某种自定义 UIScrollView 或类似的东西来绕过限制,比如创建自己的滚动机制?


您是否考虑过将 NSURLConnection 代码移动到后台线程上运行?这应该允许它在用户滚动时运行。

你的 UITableView 是一个 UIScrollView (你提到过),这意味着你可以针对它注册一个 UIScrollViewDelegate 。如果您实现 scrollViewDidScroll: 您可以有效地让您的主线程轮询以查看您是否有来自 NSURLConnection 的结果。