UICollectionView中的断言失败

时间:2014-04-07 02:03:31

标签: ios objective-c uicollectionview uicollectionviewcell uicollectionviewlayout

我收到此错误:

*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], /SourceCache/UIKit_Sim/UIKit-2935.137/UICollectionView.m:3241

两种方法:

- (id)initWithCollectionViewLayout:(UICollectionViewFlowLayout *)layout {
    if (self = [super initWithCollectionViewLayout:layout]) {
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CELL"];
    [self.collectionView setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CELL" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];

    UIImageView *backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg"]];
    cell.backgroundView = backgroundView;

    return cell;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

我还在代码和故事板中检查了我的标识符中的拼写错误或空格。

2 个答案:

答案 0 :(得分:0)

可能是您在cellForItemAtIndexPath中分配新对象。如果用户滚动浏览集合视图,则这可能会有问题。相反,在viewDidLoad中使用for循环将图像添加到NSMutableArray,然后使用该数组作为数据源。通常,您永远不想在cellForRowAtIndexPath方法中分配新对象,因为它经常被调用。

编辑:另外,backroundView是什么?你正在分配一个名为bg的新imageView,而不是backgroundView。你没有使用变量bg。

答案 1 :(得分:0)

您应该创建自己的UICollectionViewCell子类,并在initWithFrame方法中添加子视图。

这样,当您将已回收的单元格出列时,您不必担心它是否已经有了额外的视图。