【问题标题】:dequeueReusableCellWithReuseIdentifier crash 'could not dequeue a view of kind" UICollectionElementKindCell'dequeueReusableCellWithReuseIdentifier crash '不能出列同类视图' UICollectionElementKindCell'
【发布时间】:2023-04-04 06:35:01
【问题描述】:

我遇到了以下崩溃:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法将类型视图出列:带有标识符 Cell 的 UICollectionElementKindCell - 必须为标识符注册一个 nib 或一个类,或者在情节提要中连接一个原型单元格”

我的 ViewDidLoad 中有以下内容:

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

而崩溃的那一行在 cellForItemAtIndexPath 回调中:

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

我一直在寻找几个小时,但找不到任何解决方案。我尝试对 UICollectionViewCell 进行子类化,但得到了同样的错误。

通过断点,我确定 registerClass 行在 dequeueReusableCellWithReuseIdentifier 回调执行之前被执行。

【问题讨论】:

  • registerClass:forCellWithReuseIdentifier: 行放置一个断点。当它被击中时,打印self.collectionView。是零吗?如果是这样,您忘记连接插座(如果使用笔尖)或设置属性(如果使用代码)。如果不是 nil,则在 dequeueReusableCellWithReuseIdentifier:forIndexPath: 行放置一个断点。当断点被命中时打印collectionView。你得到的指针和你从第一个断点得到的指针一样吗?
  • @robmayoff 按照您的步骤,在dequeueReusableCellWithReuseIdentifier:forIndexPath 之前它具有相同的指针。但是当它点击dequeueReusableCellWithReuseIdentifier:forIndexPath 时,它会因同样的错误而崩溃。

标签: xcode collections deque


【解决方案1】:

我遇到了这个问题,因为我在实例化表视图对象之前调用了 registerClass。工作代码:

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];

【讨论】:

    【解决方案2】:

    另外,不要忘记单元格(注册... forCellWithReuseIdentifier)和补充视图(注册... forSupplementaryViewOfKind)之间的区别。

    我用补充(页眉/页脚)类型正确dequeing它,但我不小心将它注册为单元格类型。呵呵。

    【讨论】:

    • 这个答案似乎很明显,但很难确定,因为您只是想象您编写了正确的方法。很好的答案。
    【解决方案3】:

    如果您在 UICollectionViewControllerUITableViewController 中遇到这种情况,请按照 rob mayoff 所说的去做,并确保您的 Collection ViewTable View 已连接到您的故事板中的属性。

    另一个常见错误是您忘记在情节提要中提供正确的CollectionIDCellID

    【讨论】:

      【解决方案4】:

      有一次我在处理集合视图单元格时,我写道:

      static NSString *identifier = @"cell "; 
      

      仔细观察,您会在标识符字符串的末尾看到一个额外的空格。意识到我的错误后,我希望这对某人有所帮助。

      参考:

      could not dequeue a view of kind: UICollectionElementKindCell with identifier

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多