39

コレクションビューで最初の急落を取り、このエラーに遭遇しています:

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '種類のビューをデキューできませんでした: 識別子セルを持つ UICollectionElementKindCell - 識別子の nib またはクラスを登録するか、ストーリーボードのプロトタイプ セルを接続する必要があります'

以下に示すように、コードは非常に単純です。何が欠けているのか一生分からない。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor]; 
return cell;
}

コレクション ビュー コントローラーは nib を使用して作成され、デリゲートとデータソースは両方ともファイルの所有者に設定されます。

View Controller のヘッダー ファイルも非常に基本的なものです。

@interface NewMobialViewController_3 : UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@end
4

15 に答える 15

42

dequeue メソッドのUICollectionView ドキ​​ュメントから:

重要:このメソッドを呼び出す前に、registerClass:forCellWithReuseIdentifier: または registerNib:forCellWithReuseIdentifier: メソッドを使用して、クラスまたは nib ファイルを登録する必要があります。

于 2013-02-25T07:41:36.300 に答える
30

dequeueReusableCellWithReuseIdentifier の引数と UICollectionViewCell のプロパティの間で同じ識別子を使用する必要があります。

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];

識別子

于 2014-10-21T01:29:59.947 に答える
6

@jrtutonが書いたものを補完する...必要なものは次のとおりです。

1) nib ファイルを登録して、識別子に「接続」します。

//MyCollectionView.m
- (void) awakeFromNib{
 [self registerNib:[UINib nibWithNibName:@"NibFileName" bundle:nil]   forCellWithReuseIdentifier: @"MyCellIdentifier"];
}

2) 識別子を使用して、ペン先からカスタム セルをロードします。

//MyCollectionView.m
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath  *)indexPath {
    MyCustomCollectionViewCell* cell = [cv dequeueReusableCellWithReuseIdentifier:@"MyCellIdentifier" forIndexPath:indexPath];
}

3) 常に静的な NSString* を使用して、アプリで同じ識別子が再び使用されるのを回避します。

于 2014-08-24T03:29:03.380 に答える
4

私はすべて100%正しく行われました。しかし、何らかの理由で1時間同じエラーが発生しました。その後、私がしたことは次のとおりです。

  1. ストーリーボードに移動
  2. プロトタイプセルを選択します(私の場合)
  3. アイデンティティインスペクターからクラス名をクリアしてから、書き直します
  4. 属性インスペクターで識別子名を書き換えます

簡単に言えば、以前に修正したとしても、このステップをやり直しました。xcode が特定のナノ秒で何かを見逃しているようです。

于 2018-04-01T00:09:00.577 に答える