我有一个带有单一视图控制器的示例应用。控制器的视图的子视图如下所示
UIView
UIScrollView -- (Frame = {0, 0, 320, 480})
UICollectionView -- (firstCollectionView, Tag = 0, Frame = {0, 0, 320, 480})
UICollectionView -- (secondCollectionView, Tag = 1, Frame = {480, 0, 320, 480})
UICollectionView -- (thirdCollectionView, Tag = 2, Frame = {960, 0, 320, 480})
然后,在viewDidload中我调用
[self.firstCollectionView reloadData]; // Tag = 0
[self.secondCollectionView reloadData]; // Tag = 1
[self.thirdCollectionView reloadData]; // Tag = 2
在委托方法numberOfSectionsInCollectionView:中,我把NSLog看看哪个collectionView开始重新加载它的数据
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
NSLog(@"Tag : %i", collectionView.tag);
}
令人惊讶的是,我得到了这个结果
2014-05-27 12:20:22.462 SampleApp[60652:60b] Tag : 2
2014-05-27 12:20:22.462 SampleApp[60652:60b] Tag : 1
2014-05-27 12:20:22.462 SampleApp[60652:60b] Tag : 0
我每次尝试都会产生这样的结果(2 - > 1 - > 0) 你知道为什么结果(log)是反向的吗?它与线程有关吗?
最佳
P.S。我无法共享实际代码,但是,这是与UICollectionView问题相关的所有内容。我只是调用控制器的viewDidLoad中的单个UIScrollView中包含的多个UICollectionView的reloadData,并发现了这个奇怪的结果。
答案 0 :(得分:1)
重新加载调用后,重新加载调用将在单独的线程中运行。线程不保证按顺序运行。该框架将根据需要提出数据。如果集合视图不在可见框架中,则根本不会触发委托回调。
如果您正在查看按顺序重新加载数据,则有一些具体方法可以实现它。请查看wait till UITableView finish reloadData和Get notified when UITableView has finished asking for data?。您也可以为集合视图扩展它。