真是见鬼了,这个方法为何会执行两次?

2015-09-14 21:10:26 +08:00
 strom001
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

//  下面 _assetFetchResult 是提取的一个相册,这些都不重要

 [_imageManager requestImageForAsset:_assetFetchResult
                                 targetSize:size
                                contentMode:PHImageContentModeAspectFit
                                    options:nil
                              resultHandler:^(UIImage *result, NSDictionary *info ){

                                  _a++;  
                                  NSLog (@"%i", _a ); 
             // 这是定义的一个 int
             // 这个_a 的结果第一次为 1 ,第二次为 2 ,怎么会执行两次呢?

                              }];
           return cell;
}
3796 次点击
所在节点    iDev
4 条回复
zwzmzd
2015-09-15 08:39:16 +08:00
设断点,看调用栈,几分钟的事
EggmanQ
2015-09-15 11:48:28 +08:00
没上下文没系统版本……

这跟 UICollectionView ( UITableView ) 的 cell 重用机制有关,最直接打断点就能看到了。

我之前调制 UITableView 的时候也发现类似的问题( iOS 8 ), cell 在准备重用的时候(快要移动到可见区域), UITableView 会调用一次 cellForRowAtIndexPath ,然后 cell 出现的时候(移动到可见区域,但只有 1 像素), UITableView 又会再调用一次 cellForRowAtIndexPath 。
strom001
2015-09-15 12:51:33 +08:00
@EggmanQ @zwzmzd 谢谢二位。如果在 cell 里添加 image view 的话(代码如上),会产生两次(一大一小)图片,该怎么解决呢?
strom001
2015-09-15 15:46:07 +08:00
终于找到原因了……和 cell 没关系,是别的地方影响了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220697

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX