同时在多个UICollectionView上调用reloadData

时间:2014-05-27 05:33:00

标签: ios objective-c uiscrollview uicollectionview viewdidload

我有一个带有单一视图控制器的示例应用。控制器的视图的子视图如下所示

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,并发现了这个奇怪的结果。

1 个答案:

答案 0 :(得分:1)

重新加载调用后,重新加载调用将在单独的线程中运行。线程不保证按顺序运行。该框架将根据需要提出数据。如果集合视图不在可见框架中,则根本不会触发委托回调。

如果您正在查看按顺序重新加载数据,则有一些具体方法可以实现它。请查看wait till UITableView finish reloadDataGet notified when UITableView has finished asking for data?。您也可以为集合视图扩展它。