it-swarm.com.ru

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

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

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

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

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

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

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

38
Cail Demetri

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

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

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

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

161
simon_smiley

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

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

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

20
Dschee

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

7
Annie

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

5
William Hu

Проблема в том, что в вашей раскадровке есть несколько ячеек с одинаковым именем. Например, для одного табличного представления существует несколько ячеек с одинаковым идентификатором. В моем случае у меня было три ячейки, которые все назывались «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;
}

Удачи!

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

3
Cail Demetri

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

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

Ответ: не делай этого. После того, как я почистил кончик и добавил все элементы, как в Storyboard - все исправлено.

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

3
WINSergey

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

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

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

2
Ryan

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

1
2rahulsk

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

Убедитесь, что он находится в действующей цели.

 enter image description here

1
Zaid Pathan

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

0
ck8414

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

0
user1039695

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

0
Stephen Selvaraj