我遇到了[UICollectionView reloadData]
的问题,它在我指定的委托上调用numberOfSectionsInCollectionView
之前似乎已经卡住了很长一段时间。这就是:
应用程序启动时,UICollectionView立即可见,并在委托上调用numberOfSectionsInCollectionView
,它返回空数组中的项目数(即0),并立即开始从Web下载数组的数据服务。下载完成后,数据被反序列化并添加到上面的数组中,然后在reloadData
实例上调用UICollectionView
。这是应用似乎停止做任何事情的地方,并且在20-30秒(或有时长达一分钟)之后,代表接到numberOfSectionsInCollectionView
的呼叫。一旦收到此呼叫,重新加载就会很快完成。
我相信reloadData
在自己的线程中运行,但我尝试在一个单独的线程中启动它,以确保它不是我的任何代码阻止进程。 reloadData
在看似卡住的时候可以做些什么?我应该在reloadData
和numberOfSectionsInCollectionView
之间使用任何中间代理方法吗?我认为这是第一个在重新加载后调用的方法,就iOS开发人员而言。
如果有人能告诉我可能出错的地方,太棒了,但我也很感激有关如何调试这个的提示!
答案 0 :(得分:13)
永远不要从后台线程做UIKit的东西。因此,请确保在主线程上调用reloadData,并且不要从后台线程修改后备数组。