2012-11-03 44 views
4

我遇到了[UICollectionView reloadData]问题,在我指定的委托中,它似乎卡住了很长一段时间,然后才调用numberOfSectionsInCollectionView。这是发生了什么事情:UICollectionView卡在reloadData中

该应用程序以UICollectionView立即可见并且在代理上调用numberOfSectionsInCollectionView,该代理返回空数组中的项目数(即0),并立即开始从该数组下载数据一个Web服务。一旦下载完成,数据被反序列化并添加到上述数组中,然后在UICollectionView实例上调用reloadData。这是应用程序似乎停止做任何事的地方,在20-30秒(或有时长达一分钟)之后,代表接到致电numberOfSectionsInCollectionView。一旦收到此呼叫,重新加载就会很快完成。

我相信reloadData运行在自己的线程,但我试过在单独的线程中启动它,以确保它不是我的任何代码阻塞进程。 reloadData在卡住的时候可以做些什么?我应该实施reloadDatanumberOfSectionsInCollectionView之间是否有任何中介委托方法?就iOS开发人员而言,我认为这是第一个在重新加载后调用的方法。

如果有人能告诉我什么可能会出错,太棒了,但我也很感激任何提示如何调试!

+1

确保在主线程上调用reloadData。另外请确保您不要从后台线程修改后备数组。 – Felix

+0

Genius @ phix23!做出答复,以便我可以接受你的答案。 – Merott

回答

13

不要从后台线程做UIKit的东西。因此,确保在主线程上调用reloadData,并且不要从后台线程修改后备数组。

+0

谢谢!问题在于'reloadData'没有被主线程调用。 – Merott

+0

@ phix23是否有可能获得有关reloadData何时完成而不将其放入主线程的信息? –

+0

http://stackoverflow.com/questions/18796891/uicollectionview-reloaddata-not-functioning-properly-in-ios-7/20386007#20386007 –

相关问题