2

シミュレーターでアプリを実行すると、このランタイム エラーが発生します。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier PlayingCard - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

クラッシュする行は

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

メソッドで

-(UICollectionViewCell*) collectionView:(UICollectionView *)collectionView
             cellForItemAtIndexPath:(NSIndexPath *)indexPath{}

私が理解しているように、エラーは識別子「PlayingCard」が CollectionView の CollectionViewCells の識別子のいずれとも一致しないことを意味しますが、ストーリーボードの識別子が同一であることを確認しました。

ご協力いただきありがとうございます

4

3 に答える 3

7

あなたのエラーはあなたの問題についての詳細を伝えます

must register a nib or a class for the identifier or connect a prototype cell in a storyboard

UICollectionViewCell クラスをコードのみで作成する場合は、collectionView に viewDidLoad の register クラスを使用します。

 [self.collectionView registerClass:[YourCell class] forCellWithReuseIdentifier:@"PlayingCard"];

UICollectionViewCell を Xib で作成する場合は、registerNib を使用します。

UICollectionViewCell をストーリーボードにドラッグする場合は、UICollectionView クラスを指定し、識別子を再利用します

ストーリーボードでセルのクラス名を指定するのを忘れたと思います

于 2013-10-13T01:46:34.353 に答える
4

以下は、uicollectionview の識別子を使用してセルを実装する方法のサンプル コードです。これが役立つことを願っています

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

また、ray の Web サイトには、概念全体をもう少し理解するのに役立つ uicollectionview ビューに関する優れたチュートリアルがあります。ここにリンクチュートリアルがあります

これがあなたを助けるか、それとももっと助けが必要かどうか教えてください。

編集:

プロジェクトがクラッシュする問題は、実際にはストーリーボードの部分にありました。すべてを正しく実行しましたが、セルは接続されませんでした。簡単な修正でした。プロジェクトを返送し、そこにも少しコメントを残しました。さらにサポートが必要な場合はお知らせください。

于 2013-10-13T04:47:31.487 に答える
1

initに配置 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell" ]; するか、上記のようにビューをロードし、ストーリーボードのセルが同じ名前であることを確認してください。

ストーリーボードで生成された xml は次のようになります (tableViewCell ではなく collectionViewCell を除く)。

<tableViewController id="qqN-Qz-7Na" customClass="ColorPickerSavedColorTableViewController" sceneMemberID="viewController">
                <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="jm9-vU-9fK" userLabel="TableView">
                    <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                    <prototypes>
                        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" id="8ty-Ap-v04">
                            <rect key="frame" x="0.0" y="22" width="320" height="44"/>
                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8ty-Ap-v04" id="Omv-J2-1dd">
                                <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
                                <autoresizingMask key="autoresizingMask"/>
                            </tableViewCellContentView>
                        </tableViewCell>
                    </prototypes>
                </tableView>
                <navigationItem key="navigationItem" id="6MG-Do-Mu4"/>
            </tableViewController>

tableViewCell セクションを見てください

于 2013-10-13T07:55:34.893 に答える