Ошибка утверждения в -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:]
Я получил эту ошибку, начиная с IOS 7. В IOS 6 она работает нормально.
Я смотрю в Интернете, и я нашел это:
http://forums.xamarin.com/discussion/8233/ios-7-crash-in-collectionview
Однако решение не имеет смысла
Я понял. Я неправильно использовал CollectionView.RegisterClassForCell. Видимо, я должен был использовать CollectionView.RegisterNibForCell при настройке контроллера представления. Это решило проблему. iOS 6, должно быть, была более снисходительной.
Может ли кто-нибудь из вас подсказать мне этот баг?
Симптомы:
- Крушение
- Ошибка утверждения в -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:]
- Работает в IOS6, а не IOS 7
Код, который меня вызывает подозрение, таков:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGSize sz = [BGCollectionViewCellImage defaultSize];
return sz;
}
Но он кажется слишком обычным.
sz просто CGSize 100*120
Другое это:
- (BGCollectionViewCellImage *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
BGCollectionViewCellImage * cell = [[BGCollectionViewCellImage alloc]init];
Image * img= self.arImages[indexPath.row];
[cell setImg:img andIndex:indexPath.row+1];
return cell;
}
Может быть, я должен использовать dequeue что-то вроде UITableViewCell
Я получил еще одну подсказку. Если бы я попытался убрать из очереди какую-то ячейку, я бы получил следующее:
2013-10-14 21:18:34.346 имя_домена[24667:a0b] * Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «не удалось удалить из очереди вид: UICollectionElementKindCell с идентификатором BGCollectionViewCellImage — необходимо зарегистрировать перо или класс для идентификатора или подключите ячейку прототипа в раскадровке' * Первый стек вызовов броска: (
Похоже, мне сначала нужно кое-что зарегистрировать.