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

Недопустимый зарегистрированный псевдоним для идентификатора (CELLNAME) - nib должен содержать ровно один объект верхнего уровня, который должен быть экземпляром UITableViewCell

Извините за длинный заголовок, но я хотел, чтобы это было ясно видно из поиска Google. Кроме того, это отличается от многих других подобных вопросов здесь тем, что он не указывает идентификатор "null", но тот, который на самом деле существует.

По существу проблема возникает, когда вы пытаетесь перейти с помощью одной из ячеек в контроллере табличного представления, чтобы перейти к другому представлению (независимо от того, что это может быть).

Большинство людей столкнулись с этой проблемой после того, как запустили учебник Apple в "Список дел" и ожидали, что ячейки будут работать в одном движении независимо от их цели. Эта проблема, вероятно, упрощена для большинства, но для новичков, ее довольно сложно, мне потребовалось около 3 часов.

В основном ошибка:

invalid nib registered for identifier (prototypeCell) - nib must contain exactly one top level object which must be a UITableViewCell instance

Где "prototypeCell" будет тем, что называется вашей ячейкой. Это исключение, которое происходит сразу после запуска приложения.

4b9b3361

Ответ 1

У меня была такая же проблема, как и выше, но я не использовал раскадровки, и проблема просто появилась в синей манере.

Я обнаружил, что решение было в файле cellview. Я добавил uibutton, но он был добавлен за пределы ячейки по ошибке. Это означало, что это было похоже на дополнительный просмотр в uiview.

Как только я нашел его и удалил этот дополнительный просмотр, проблема сразу исчезла.

Если у вас есть эта ошибка, проверьте uitableviewcell для дополнительных просмотров и объектов, добавленных по ошибке

Ответ 2

Ответ simon_smiley указал мне в правильном направлении, но потребовалось еще несколько пробных ошибок, которые привели к следующему решению:

Проблема возникает не только для дополнительных объектов UIView верхнего уровня, но и для распознавателей жестов. Поэтому убедитесь, что вы не используете распознаватели жестов в своем поврежденном XIB файле, вы можете установить их вместо кода.

Например, вы можете сделать это в awakeFromNib, как указано vahotm в комментариях к принятым ответам.

Ответ 3

У меня была такая же проблема! И в моем случае пользовательская ячейка была подклассом UIView по ошибке вместо UITableViewCell. Таким образом, замена UIView на UITableViewCell устраняет проблему!

Ответ 4

Такая же проблема, потому что я перетаскиваю UITapGestureRecognizer в подзаголовках ContentView. Просто удалите его.

Ответ 5

Проблема заключается в том, что в вашем раскадровке есть несколько ячеек с одинаковым именем. Например, для одного представления таблицы есть несколько ячеек, которые имеют одинаковый идентификатор. В моем случае у меня было три ячейки, которые все назывались "prototypeCell".

Исправление на самом деле довольно просто. Для каждой ячейки назовите это простое имя с номером ячейки в конце. Этот номер ячейки должен соответствовать indexPath.row позже, поэтому в основном начинаются с 0.

Пример:

prototypeCell0
prototypeCell1
prototypeCell2

Затем перейдите в класс, отвечающий за контроллер, и найдите функцию

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Затем замените код:

static NSString *CellIdentifier = @"PrototypeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

С кодом:

static NSString *CellIdentifier = @"ListPrototypeCell";
NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];
NSString* actual = [CellIdentifier stringByAppendingString:num];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];

Все остальное может оставаться неизменным. Этот код в основном получает номер строки, добавляет его в базу идентификаторов, получает ячейку из таблицы с использованием этой строки. Поэтому, если он отвечает на другой номер строки, он возвращает другую ячейку.

Только для пояснения моя функция для этой проблемы такова:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];

    NSString* actual = [CellIdentifier stringByAppendingString:num];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];
    cell.textLabel.text = self.content[indexPath.row];

    return cell;
}

Удачи!

Кроме того, это мой первый ответ/вопрос комбо, поэтому я действительно не знаю, как подойти к нему, поэтому, если я сделал что-то неправильно, скажите мне и/или измените его. Спасибо!

Ответ 6

Иногда вы используете раскадровку и имеете collectionView внутри нее и collectionView. После этого вы решите упростить свою раскадровку и разделить ячейку на другой наконечник. Вы создаете пустой нить, Ctrl+C из раскадровки → Ctrl+V в nib.

Все выглядит отлично, но у вас будет Завершение приложения из-за неотображенного исключения "NSInternalInconsistencyException", причина: "недопустимый зарегистрированный псевдоним для идентификатора (PrettyCollectionViewCell)). nib должен содержать ровно один объект верхнего уровня, который должен быть экземпляром UICollectionReusableView

Ansver: не делайте этого. После того, как я уберу наконечник и добавлю все элементы, как у меня в Раскадке, это исправлено.

Похоже на ошибку xCode IB - Версия 7.3.1 (7D1014)

Ответ 7

Я подниму свое немое решение ради гуглеров...

Это была моя личная глупая ошибка - когда я создал новую настраиваемую ячейку для моего представления в таблице, я отправился в каталог верхнего уровня моего проекта → добавить новый файл → и создал пустой тип файла под OS X, а не в разделе iOS.

Надеюсь, у большинства людей есть другая проблема, описанная выше, поскольку она менее смущающая: P

Ответ 8

В моем случае, Я добавил UITableViewHeaderFooterView подкласс и XIB в другую цель вместо фактической цели.

Убедитесь, что он запущен.

введите описание изображения здесь

Ответ 9

Эта ошибка в основном из-за некоторых дополнительных просмотров, которые были добавлены по ошибке. Загляните в файл .xib и проверьте, не добавлен ли ненужный вид по ошибке. Удалите это, и оно будет работать идеально. Вы можете проверить наличие нежелательных просмотров, вот как это выглядит

Ответ 10

У меня была эта проблема, наконец выяснилось, что я создал подкласс UITableViewCell вместо подкласса CollectionViewCell. это был вечер, и я устал, LOL. Исправлено в mng.

Ответ 11

Я вытащил коллекцию просмотра ячейки из другого проекта и получил это.
'для идентификатора (ячейки) зарегистрирован неверный перо - перо должно содержать ровно один объект верхнего уровня, который должен быть экземпляром UICollectionReusableView'.
Затем я сравнил ячейку представления коллекции из созданного мной себя и обнаружил, что многоразовое представление отсутствует. Надеюсь, это поможет.
enter image description here

Ответ 12

Это была глупая ошибка с моей стороны, и у меня было две ячейки таблицы, которые вызвали эту ошибку. Удалена другая "ячейка табличного представления", которая исправила проблему.

Ответ 13

Я решил эту проблему, установив имя класса в конструкторе интерфейса, чтобы он соответствовал идентификатору повторного использования ячейки (для этого класса) в конструкторе интерфейса.

Примечание: я не говорю, что класс и идентификатор должны совпадать. Я говорю, что им нужно связать соответствующий вид и модель поддержки.