Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 同时在多个UICollectionView上调用reloadData_Ios_Objective C_Uiscrollview_Uicollectionview_Viewdidload - Fatal编程技术网

Ios 同时在多个UICollectionView上调用reloadData

Ios 同时在多个UICollectionView上调用reloadData,ios,objective-c,uiscrollview,uicollectionview,viewdidload,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,

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

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) 你知道为什么结果(日志)是相反的吗?这与线程有关吗

最好的


另外,我不能分享实际的代码,但是,这是与UICollectionView问题相关的所有内容。我只是在控制器的viewDidLoad中调用包含在单个UIScrollView中的多个UICollectionView的reloadData,并发现了这个奇怪的结果。

一旦进行了重新加载调用,重新加载调用将在不同的线程中运行。线程不能保证按顺序运行。该框架将根据需要要求提供数据。如果集合视图不在可见帧中,则根本不会触发委托回调


如果您考虑按顺序重新加载数据,那么有一些具体的方法可以实现。请调查和分析。您也可以将其扩展到集合视图。

感谢您提供的信息“在单独线程中重新加载运行”。这让我更清楚了:)一个问题,如果不能保证线程按顺序运行,为什么每次尝试(2->1->0)时都会得到相同的顺序。为什么没有其他序列(1-->2-->0、0-->2-->1和其他)我不确定为什么序列总是2-->1-->0。一个随机猜测是,在消息执行完成之前,重新加载调用将堆积起来。如果更改重新加载的顺序,是否有任何更改?比如在3上调用reload,然后再调用2,然后调用1或任何其他组合。我稍后会尝试让你知道。嘿,@NaveenPrasadR。你所说的框架是什么意思?它要求根据需要提供数据。如果集合视图不在可见帧中,则根本不会触发委托回调。当它不可见时不会重新加载?