Что значит UICollectionView _createPreparedCellForItemAtIndexPath: withLayoutAttributes: applyAttributes:?
Ошибка утверждения в - [UICollectionView _createPreparedCellForItemAtIndexPath: withLayoutAttributes: applyAttributes:]
Я получил эту ошибку с IOS 7. Он отлично работает в IOS 6.
Я смотрю по сети, и я нашел это:
http://forums.xamarin.com/discussion/8233/ios-7-crash-in-collectionview
Однако решение не имеет смысла
Я понял это. Я неправильно использовал CollectionView.RegisterClassForCell. По-видимому, я должен был использовать CollectionView.RegisterNibForCell при настройке viewcontroller. Это поставило проблему. 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 - должен зарегистрировать ниб или класс для идентификатора или подключить прототип ячейки в раскадровке '
* Первый стек вызовов броска:
(
Похоже, я сначала что-то зарегистрировал.
Ответы
Ответ 1
Вам необходимо зарегистрировать свою ячейку, используя один из соответствующих методов регистрации, указанный в Справочник класса UICollectionView
- (void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier;
Соответствующее одно из них нужно вызывать только один раз для экземпляра UICollectionView
.
Ответ 2
В случае, если кто-то попадает в это, другая возможность заключается в том, что вы забудете return cell;
в конце метода collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
.
Ответ 3
Без раскадровки вам необходимо зарегистрировать свою ячейку внутри viewDidLoad:
// Register Nib
[self.collectionView registerNib:[UINib nibWithNibName:CollectionViewCell_XIB bundle:MAIN_BUNDLE] forCellWithReuseIdentifier:CollectionViewCell_ID];
CollectionViewCell_XIB
- имя вашей ячейки xib
CollectionViewCell_ID
- это идентификатор вашей ячейки xib
Ответ 4
fwiw У меня были некоторые проблемы с преобразованными проектами из swift2 в swift3. Я использовал NSIndexPath в некоторых местах, где он должен был быть IndexPath.
Ответ 5
У меня возникла проблема, когда я не подключил представление коллекции, которое я имел в коде (IBOutlet), к представлению коллекции в XIB, и thats, когда я получал эту ошибку