에 속성을 적용하지 않는 : 레벨 1 (잠금 해제)UICollectionView * 어설 션 실패는 * 나는 다음을 수행하려고 UICollectionViewCell
A) 잠금 해제 수준에 대한 배경 이미지가 포함되어 있습니다.
B) 레벨 2-20이 잠겨 있습니다 (다른 배경 이미지 포함). 각각의 연속 레벨이 완료되면 잠금 해제됩니다.
처음에는 앱을 실행하고 UICollectionView
으로 이동하면 모든 것이 잘 보입니다. 레벨 1을 실행하고 완료하면 코어 데이터를 통해 NSNumber
관리 객체 인 levelLocked
의 번호 0을 저장하고 레벨 2에 속합니다 (0은 잠금 해제됨을 의미하고 나머지 레벨 3-20은 1).
레벨이 잠겨 있는지 여부를 저장하는 프로세스가 작동합니다. 하지만 내 UICollectionView
으로 돌아 가면 레벨 2의 물리적 변화가 보이지 않습니다 (여전히 잠금 장치의 배경 이미지가 있음). 나는 UICollectionView
전에 ViewController
로 돌아 가면
또한, 다음 UICollectionView
, 오류가있는 응용 프로그램 충돌 다시 입력 :
*** Assertion failure in -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:],
내 세포가 제대로 업데이트되지 않는 나타납니다 (난 몰라 데이터를 올바르게 다시로드하는 방법을 알고 있어야합니다.) 잠금 해제 및 잠긴 레벨 유형 모두에 대해 사용자 정의 UICollectionViewCell
펜촉을 등록했습니다. 모든 철자를 검사했습니다 (문제가 처음이라면 처음으로 작업하지 않았을 것입니다).
다음은 셀 생성을위한 코드입니다.
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;
}
당신의 생각을 알려주세요. XCode 7.12와 함께 iOS 8.1을 사용하고 있습니다.
예외에 대한 텍스트가 더 있습니까? 어설 션이 실패한 이유에 대한 이유 또는 설명이 있어야합니다. – Paulw11
다른 게시물에서 언급했듯이 이것은 전체 어설 션 오류 메시지입니다. '어설 션 오류 - [UICollectionView _createPreparedCellForItemAtIndexPath : withLayoutAttributes : applyAttributes :]' –
두 가지 나 한테 즉시 뛰어 내라. 먼저 하위 뷰를 셀에 추가하지만 셀을 다시 사용하는 경우 추가 하위 뷰를 추가합니다. 이러한 하위 뷰는 셀 하위 클래스의 일부 여야하며 여기에 추가 할 필요가 없습니다. 둘째, 태그를 사용하여 색인을 캡처하는 것은 허약합니다. 셀 단추를 누를 때 대리자 메서드가 호출되도록 셀과 컨트롤러간에 프로토콜을 구현하는 것이 좋습니다. 델리게이트 메소드는 셀을 받으면'indexPathForCell'을 사용하여 indexPath를 검색 할 수 있습니다. – Paulw11