Подтвердить что ты не робот

DequeueReusableCellWithReuseIdentifier crash 'не может удалить из вида вид "UICollectionElementKindCell"

Я получаю следующий сбой:

Завершение приложения из-за неотображенного исключения "NSInternalInconsistencyException", причина: "не может удалить вид вида: UICollectionElementKindCell с идентификатором Cell - должен зарегистрировать ниб или класс для идентификатора или подключить ячейку прототипа в раскадровке"

В моем ViewDidLoad есть следующее:

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

И строка, которая выходит из строя, находится в обратном вызове cellForItemAtIndexPath:

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

Я искал часы, но не могу найти решение. Я попытался подклассифицировать UICollectionViewCell, но получить ту же ошибку.

С точками останова я определил, что строка registerClass выполняется до выполнения обратного вызова dequeueReusableCellWithReuseIdentifier.

4b9b3361

Ответ 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

Кроме того, не забудьте разницу между ячейкой (register... forCellWithReuseIdentifier) ​​и дополнительным представлением (register... forSupplementaryViewOfKind).

Я правильно оценивал его с помощью дополнительного типа (верхний/нижний колонтитул), но я случайно зарегистрировал его как тип ячейки. Duh.

Ответ 3

Если вам это случится, в UICollectionViewController или UITableViewController сделайте то, что сказал roboffoff, и убедитесь, что ваш Collection View или Table View подключен к вашему ресурсу в вашей раскадровке.

Еще одна распространенная ошибка в раскадровке, которую вы забыли дать правильно CollectionID или CellID.

Ответ 4

Когда я работал над ячейками коллекции, я написал:

static NSString *identifier = @"cell "; 

Внимательно осмотрите в конце строки идентификатора дополнительное пространство. Поняв мою ошибку, я надеюсь, что это кому-то поможет.

Ссылка:

не может удалить вид вида: UICollectionElementKindCell с идентификатором