エラーが出ます...
*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2249
UICollectionViewを表示しようとしたとき。
それを引き起こしている線は...
static NSString *CellIdentifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
デキューでエラーが発生しました。
他にエラーはないので、これからどこから始めればいいのかわからない。
誰かがこれに光を当てることができますか?
ドキュメントを読んでいる(おそらくこれを最初に行ったはずです:))
とにかく、私が使用しているcollectionViewは、個別のxibファイル(ストーリーボードではなく)内にあり、ドキュメントから...
Important: You must register a class or nib file using the
registerClass:forCellWithReuseIdentifier: or
registerNib:forCellWithReuseIdentifier: method before calling this method.
ありがとう
以下のように登録する必要があります:
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MY_CELL"];
registerNib:
メソッドを使用する場合は、次のことを確認してください。
UINib *nibH = [UINib nibWithNibName:HEADER_ID bundle:nil];
[collectionView registerNib:nibH
forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
withReuseIdentifier:HEADER_ID];
that [〜#〜] also [〜#〜] nibファイルで、最上位のコレクションの再利用可能なビューを選択し、属性インスペクターを使用し、確認するIdentifier
は、withReuseIdentifier:
パラメータに渡すのと同じ値に設定されます。
私も同じ問題を抱えていました。ここに私がそれを解決した方法があります。
動く
_[self.pictureCollectionView registerNib:[UINib nibWithNibName: bundle:nil] forCellWithReuseIdentifier:reuseID]
_
- (void)viewDidLoad
に
メソッド- (void)awakeFromNib
ではなく。
交換する
NSString *CellIdentifier = @"Cell";
と
static NSString *CellIdentifier = @"Cell";
一意のReuseIdentifiersで複数のUICollectionViewsを使用すると、このエラーがポップアップ表示されます。 ViewDidLoadで、次のように各CollectionViewのreloadIdentifierを登録します。
[_collectionView1 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView1CellIdentifier"];
[_collectionView2 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView2CellIdentifier"];
次に、「ICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath」に到達したときに、collectionView1のセルをcollectionView2のreloadIdentifierに設定しないようにします。このエラーが発生します。
---(DO N'T DO THIS:(または、collectionView2は間違った識別子を参照し、予期していた識別子を参照する前に適合をスローします)
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
if(collectionView != _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;
これを行う:
UICollectionViewCell *cell;
if(collectionView == _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
}else{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;