Je reçois l'erreur ...
*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2249
Lors de la tentative d'affichage d'un UICollectionView.
Les lignes qui le provoquent sont ...
static NSString *CellIdentifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
Erreur lors de la sortie de la file d'attente.
Il n’ya pas d’autres erreurs et j’ai du mal à savoir par où commencer.
Quelqu'un peut-il faire la lumière sur cette question?
Vous avez lu la documentation (vous auriez peut-être dû le faire en premier :))
Quoi qu'il en soit, la collectionViewView que j'utilise se trouve dans un fichier xib séparé (pas un storyboard) et à partir de la documentation ...
Important: You must register a class or nib file using the
registerClass:forCellWithReuseIdentifier: or
registerNib:forCellWithReuseIdentifier: method before calling this method.
Merci
Vous devez vous inscrire comme ci-dessous:
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MY_CELL"];
Assurez-vous que si vous utilisez la méthode registerNib:
:
UINib *nibH = [UINib nibWithNibName:HEADER_ID bundle:nil];
[collectionView registerNib:nibH
forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
withReuseIdentifier:HEADER_ID];
queAUSSIdans le fichier nib, lorsque vous sélectionnez la vue réutilisable de la collection de niveau supérieur, utilisez l'inspecteur d'attributs et assurez-vous que la Identifier
est définie sur la même valeur que vous transmettez à withReuseIdentifier:
paramètre.
J'ai eu le même problème. Voici comment je l'ai résolu.
Bouge toi
[self.pictureCollectionView registerNib:[UINib nibWithNibName: bundle:nil] forCellWithReuseIdentifier:reuseID]
être en - (void)viewDidLoad
,
plutôt que la méthode - (void)awakeFromNib
.
Remplacer
NSString *CellIdentifier = @"Cell";
avec
static NSString *CellIdentifier = @"Cell";
J'ai vu cette erreur apparaître lors de l'utilisation de plusieurs UICollectionViews avec des identificateurs uniques de réutilisation. Dans ViewDidLoad, vous souhaitez enregistrer chaque identifiant reuseIdentifier de CollectionView de la manière suivante:
[_collectionView1 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView1CellIdentifier"];
[_collectionView2 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView2CellIdentifier"];
Ensuite, lorsque vous accédez à "- (UICollectionViewCell *) collectionView: (UICollectionView *) collectionView cellForItemAtIndexPath: (NSIndexPath *) indexPath", vous voulez vous assurer que vous n'essayez pas de définir une cellule pour collectionView1 sur reuseIdentifier pour collectionView2 ou vous. va avoir cette erreur.
NE PAS FAIRE CECI : (ou collectionView2 verra le mauvais identifiant et jettera un ajustement avant de voir l'identifiant qu'il attendait)
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
if(collectionView != _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;
FAIRE CECI :
UICollectionViewCell *cell;
if(collectionView == _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
}else{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;
Je n'ai que crash sur iOS 9 uniquement (iOS 10/11 fonctionnent correctement).
Je n'avais pas de sous-classe personnalisée d'une disposition de flux mais je définissais la variable headerReferenceSize
directement sur celle existante . Donc, dans Interface Builder avec En-tête de section activé, j'ai obtenu ce blocage, sans la coche, tout fonctionne correctement et les en-têtes sont affichés correctement, puisque j'ai défini la taille en code.