使用dequeueReusableCellWithReuseIdentifier解决标识符问题

时间:2013-10-13 01:14:07

标签: iphone ios objective-c xcode

我在模拟器中运行应用程序时遇到此运行时错误。

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的任何标识符匹配,但我确保故事板中的标识符是相同的。

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

您的错误会详细说明您的问题

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

如果仅通过代码创建UICollectionViewCell类,请在viewDidLoad中使用register类进行collectionView

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

如果您通过Xib创建UICollectionViewCell,请使用registerNib

如果将UICollectionViewCell拖到故事板中,请指定UICollectionView类并重用标识符

我想你忘记在故事板中为你的Cell指定类名

答案 1 :(得分:4)

以下是如何使用uicollectionview的标识符实现单元格的示例代码。我希望这会有所帮助

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

此外,在ray'网站上有一个关于uicollectionview视图的精彩教程,可以帮助您更好地理解整个概念。这是链接Tutorial

如果这有助于您,或者您的朋友需要更多帮助,请告诉我。

编辑:

项目崩溃的问题确实存在于故事板部分。你做的一切都正确,但你的细胞从未连接过。这是一个简单的解决方案。我把项目寄回给你,并在那里留下了一些评论。如果您需要更多帮助,请与我们联系。

答案 2 :(得分:1)

你应该放置      [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell" ]; 在您的init或视图中如上所述加载并确保故事板中的单元格具有相同的名称。

你的故事板中生成的xml看起来应该是这样的(除了collectionViewCell而不是tableViewCell)

<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部分