gpt4 book ai didi

ios - UICollectionView *Assertion Failure* 未在 UICollectionViewCell 上应用属性

转载 作者:行者123 更新时间:2023-11-29 00:38:23 28 4
gpt4 key购买 nike

我正在尝试执行以下操作:

A) 关卡 1 已解锁(包含已解锁关卡的背景图片)。

B) 2-20 级被锁定(包含另一个背景图像)。当每个连续的级别完成时,它们将被解锁。

最初,当我运行该应用并转到我的 UICollectionView 时,一切看起来都不错。当我玩第 1 级并完成它时,我(通过核心数据)为一个名为 levelLockedNSNumber 管理对象保存数字 0,现在属于第 2 级(0 表示已解锁,其他 3-20 级应该用 1 锁定)。

保存级别是锁定还是解锁的过程有效。但是当我返回到我的 UICollectionView 时,我没有看到级别 2 的物理变化(它仍然有锁的背景图像)。

此外,如果我在 UICollectionView 之前返回到 ViewController,然后重新进入 UICollectionView,应用程序会崩溃并显示错误:

*** Assertion failure in -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:],

我的单元格似乎没有正确更新(我不知道如何正确重新加载数据)。我确实为解锁和锁定级别类型注册了自定义 UICollectionViewCell nib。我检查了所有的拼写(如果这是问题的话,它不会在第一次开始时起作用)。

这是细胞生成的代码。

static NSString *cellIdentifier = @"tortoiseCell";
static NSString *tortIdentifier = @"tortoiseLocked";

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

UICollectionViewCell *regular;

NSMutableArray *data = [self.dataArray objectAtIndex:indexPath.section];
NSString *cellData = [data objectAtIndex:indexPath.row];

NSMutableArray *ar = [self.lockArray objectAtIndex:indexPath.section];
NSNumber *arLocks = [ar objectAtIndex:indexPath.row];

if ([arLocks integerValue] == 0) {

TortoiseCell *cell = (TortoiseCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
[cell.buttonClick setTag:indexPath.row];
[cell.buttonClick setTitle:cellData forState:UIControlStateNormal];
[cell.buttonClick setBackgroundImage:[UIImage imageNamed:@"TortoiseLevels.png"]
forState:UIControlStateNormal];
[cell.buttonClick addTarget:self action:@selector(buttonPressedSoWhatNumber:)
forControlEvents:UIControlEventTouchUpInside];
cell.buttonClick.layer.masksToBounds = YES;
[cell addSubview:cell.buttonClick];
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
regular = cell;

} else if ([arLocks integerValue] == 1) {

TortoiseLocked *lockCell = (TortoiseLocked *)[collectionView dequeueReusableCellWithReuseIdentifier:tortIdentifier forIndexPath:indexPath];
[lockCell.tortoiseLock setTag:indexPath.row];
[lockCell.tortoiseLock setBackgroundImage:[UIImage imageNamed:@"TortoiseLock.png"]
forState:UIControlStateNormal];
lockCell.tortoiseLock.layer.masksToBounds = YES;
[lockCell addSubview:lockCell.tortoiseLock];
lockCell.layer.shouldRasterize = YES;
lockCell.layer.rasterizationScale = [UIScreen mainScreen].scale;
regular = lockCell;
}
return regular;
}

让我知道你的想法。我正在使用 iOS 8.1 和 XCode 7.1.2

最佳答案

如果你的数组中的值既不是 0 也不是 1,你的 cellForItemAtIndexPath 可以返回 nil。我怀疑这就是正在发生的事情,然后 Collection View 有一个断言失败,因为你给它的是 nil 而不是单元格。

简单的修复方法是将 else if 更改为 else,这将导致默认情况下“锁定”单元格。

您还可以添加一个新的 else 子句来记录错误,并使用它来尝试诊断为什么没有得到 0/1。

关于ios - UICollectionView *Assertion Failure* 未在 UICollectionViewCell 上应用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075500/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com