Для идентификатора ((null)) зарегистрирован неверный кончик - кончик должен содержать ровно один верхний уровень - PullRequest
8 голосов
/ 03 апреля 2012

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

terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier ((null)) - nib must contain exactly one top level object which must be a UITableViewCell instance'

Обратите внимание, что я не использую раскадровку.

EDIT:

Это мой соответствующий код, который вызывает проблему в соответствии с точкой останова:

[tableviewSupport registerNib:[UINib nibWithNibName:@"HotelCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:CustomCellCId];

Ответы [ 4 ]

30 голосов
/ 27 марта 2013

Другое решение:

У меня был UITableViewCell, но в моем XIB был дополнительный объект, метка, которую я поместил не туда.

Так что тщательно проверяйте свой XIB, чтобы убедиться, что есть толькоодин объект в таблице объектов на левой стороне.

enter image description here

1 голос
/ 03 апреля 2012

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Assuming you set a reuse identifier "cellId" in the nib for your table view cell...
    HotelCell *cell = (HotelCell *)[tableView dequeueReusableCellWithIdentifier:@"cellId"];
    if (!cell) {
        // If you didn't get a valid cell reference back, unload a cell from the nib
        NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"HotelCell" owner:nil options:nil];
        for (id obj in nibArray) {
            if ([obj isMemberOfClass:[HotelCell class]]) {
                // Assign cell to obj
                cell = (HotelCell *)obj;
                break;
            }
        }
     }

     return cell;
}

Теперь, основываясь на сообщенной вами ошибке, iOS ожидает один объект в массиве, поэтому цикл for может оказаться ненужным. Я сделал это, проверив, если [nibArray count] == ​​1, а затем захватывая objectAtIndex: 0 и назначая его ячейке вместо цикла, и это тоже работает. Но если однажды Apple решит вставить что-то еще в этот nibArray, цикл for защитит вас от этого.

0 голосов
/ 15 ноября 2017

В моем случае я установил свойство с именем class (например, для @property (сильный, неатомный) IBOutlet UILabel * class) в tableviewcell, это дает указанную выше ошибку, тогда имя "class" не является объективным c типом, изменить(class = classabc) решить вышеуказанную проблему.

0 голосов
/ 27 мая 2012

Возможно, это не ответ на вопрос ОП, но у меня была та же ошибка с другим решением, поэтому я отвечу на этот вопрос ради гуглеров, которые придут сюда.

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

Ключ, кажется,:

Когда вы создали файл XIB с одним UITableViewCell или подклассом (например, если вы перетаскиваете UITableViewCell из библиотеки в правом нижнем углу), Интерфейсный Разработчик показывает вам опцию под «Ячейкой табличного представления»раздел вкладки «Инспектор».

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

Это , что вам нужно ввести идентификатор (а также в вашем registerNib:withReuseIdentifer: вызове).

Еще больше расстраивает меня, когда я сталкивался с тем, что он не падал КАЖДЫЙ раз, только в первый раз.Weird.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...