重新加载数据后未调用 UICollectionView 数据源方法

Posted

技术标签:

【中文标题】重新加载数据后未调用 UICollectionView 数据源方法【英文标题】:UICollectionView datasource method not called after reload data 【发布时间】:2015-11-08 05:29:10 【问题描述】:

我正在尝试从网站获取数据并添加到我的 collectionview,但是当我调用 [self.collectionView reloadData] 时出现问题,它不起作用。

所以我的代码如下:

- (void)viewDidLoad 
    [PYBSkuApi getSKUList:1 andHotId:@"17" success:^(NSArray *skuList) 
        self.dataSource = [NSMutableArray arrayWithArray:skuList];
        [self.skuCollectionView reloadData];
    failure:^(AFHTTPRequestOperation *operation, NSError *error) 

    ];



// Data source 

- (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
    return [self.dataSource count];


- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
    return 1;


- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
....

问题是当我重新加载集合视图时,self.dataSource 更新后,它进入

 - (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView

但从不进入

- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

我不知道为什么。

【问题讨论】:

numberOfSectionsInCollectionView: 返回什么? numberOfItemsInSection 被调用了吗? 是否返回计数? 确保您已连接“Delegate”和“Datasource”以获取集合视图。 是的,它返回 8,我为自己添加了委托和数据源 为什么在numberOfItemsInSection中返回1而不返回[self.dataSource[section] count]; ? 【参考方案1】:

你有没有调用过 setCollectionViewLayout 或 initWithFrame:collectionViewLayout:

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[_collectionView setCollectionViewLayout:flowLayout];

_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout];

【讨论】:

【参考方案2】:

我遇到了同样的问题(有时UICollectionView 不会在reloadData 之后调用dataSource 的方法)。 UICollectionView 在layoutSubview 方法中重建列表,如果您在某些dataSource 方法中设置了断点,您就可以知道它。要强制 UICollectionView 重新加载列表,您应该使该集合视图的布局无效:

<...>
[self.collectionView reloadData];
[self.collectionView setNeedsLayout];
[self.collectionView layoutIfNeeded];
<...>

【讨论】:

以上是关于重新加载数据后未调用 UICollectionView 数据源方法的主要内容,如果未能解决你的问题,请参考以下文章

重新加载数据后根据要求更新后未显示 uicollectionview 单元格

UITableViewCell 在可见路径重新加载行后未调整大小

在 Activity 中重新创建后未调用 onResume

pkg_resources.get_distribution("mymodule").version 重新加载后未更新

在 reloadData 后未调用 cellForRowAtIndexPath

如何使用自定义 UIViews(以及内部的转换)重新加载自定义 UICollectionViewCell