自定义collectionView收到错误:EXC_BAD_ACCESS code = 2

时间:2015-03-06 14:10:52

标签: ios objective-c uicollectionview

我有一个从instagram获取数据的集合视图。

CollectionView通过Outlet连接:

@property (weak, nonatomic) IBOutlet UICollectionView *myCollectionView;

我是如何填充细胞的:

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

    myCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCell" forIndexPath:indexPath];

    if(!cell){

        cell = (myCell *)[myCell cell];
    }

    [self customizeLayoutFlow];
    cell.photo = self.photos[indexPath.row];


    return cell;
}

-(void)customizeLayoutFlow{

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
    self.myCollectionView.collectionViewLayout = layout;
    layout.itemSize = CGSizeMake(106.0, 106.0);
    layout.minimumInteritemSpacing = 1.0;
    layout.minimumLineSpacing = 1.0;
}

在你提出问题之前,我想补充说,没有customizeLayoutFlow方法,单元格会完美加载。但我需要使用UICollectionViewFlowLayout自定义其布局。出于某种原因,我得到了一个指向self.myCollectionView.collectionViewLayout = layout;的EXC_BAD_ACCESS代码= 2错误。

在没有数据之前,collectionView只是加载空单元格,但我想要的设计(意味着customizeLayoutFlow效果很好)。

如何解决这个问题?

更新

我用另一种方式修复问题:

#pragma mark - customize layout

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{

    return CGSizeMake(106.0, 106.0);
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{

    return 1.0;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{

    return 1.0;
}

很难过,我没有弄清楚如何使用UICollectionViewFlowLayout,但至少它有效。

1 个答案:

答案 0 :(得分:1)

如果你尝试怎么办?

-(void)customizeLayoutFlow{

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];

layout.itemSize = CGSizeMake(106.0, 106.0);
layout.minimumInteritemSpacing = 1.0;
layout.minimumLineSpacing = 1.0;

self.myCollectionView.collectionViewLayout = layout;
}

代替?