web-dev-qa-db-ja.com

dequeueReusableCellWithReuseIdentifier crack '種類のビューをデキューできませんでした "UICollectionElementKindCell'

次のクラッシュが発生します。

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

ViewDidLoadには次のものがあります。

[self.collectionView registerClass:[UICollectionViewCell class] 
        forCellWithReuseIdentifier:@"Cell"];

そして、クラッシュする行は、cellForItemAtIndexPathコールバックにあります。

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

私は何時間も探していましたが、解決策が見つかりません。 UICollectionViewCellをサブクラス化しようとしましたが、同じエラーが発生します。

ブレークポイントを使用して、dequeueReusableCellWithReuseIdentifierコールバックが実行される前にregisterClass行が実行されていることを確認しました。

13
Ken

RegisterClass beforeを呼び出していたため、この問題が発生しました。テーブルビューオブジェクトをインスタンス化していました。作業コード:

self.tableView = [[UITableView alloc] initWithFrame:self.view.frame];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[self.view addSubview:self.tableView];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView reloadData];
15
Typo Johnson

また、セル(register ... forCellWithReuseIdentifier)と補足ビュー(register ... forSupplementaryViewOfKind)の違いを忘れないでください。

私はdequeing補足(ヘッダー/フッター)タイプで正しく使用していましたが、誤って登録済みセル​​タイプとして使用していました。ええと。

4
Gorm

UICollectionViewControllerまたはUITableViewControllerでこれを経験した場合は、rob mayoffが言ったことを実行し、Collection ViewまたはTable Viewはストーリーボードのプロパティに接続されています。

もう1つのよくある間違いは、ストーリーボードで正しいCollectionIDまたはCellIDを指定するのを忘れたことです。

1
Enrico Susatyo

コレクションビューセルで作業していたとき、私は次のように書いています。

static NSString *identifier = @"cell "; 

注意深く見ると、識別子文字列の最後に余分なスペースがあります。私の間違いに気づいた後、これが誰かに役立つことを願っています。

参照:

種類のビューをデキューできませんでした:識別子を持つUICollectionElementKindCell