Xcode не может удалить ячейку с идентификатором

Моя работа посвящена `UITableView. Каждый раз, когда я запускаю свой проект, появляется эта ошибка:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell1 - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

Я проверил сто раз мой идентификатор ячейки в своем раскадровке, и в моем коде все одинаково. Код (код defaut из UITableViewController):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    return cell;
}

Изображение таблицы Вид Свойства ячейки: enter image description here

Я создал и реализовал подкласс UITableViewCell для моей ячейки.

Любая идея, почему это не работает?

В любом случае (строка кода) узнать, что является идентификатором ячейки?

Спасибо

Изменить: Снимок экрана моего конструктора интерфейса.

IB

Изменить 2: Текст customCell.h

#import <UIKit/UIKit.h>

@interface customCell : UITableViewCell

@end

При запуске проекта появляется новая ошибка:

[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.

choixActiviteViewController является подклассом UITableViewController и является настраиваемым классом контроллера Choix Activite View.

Ответ 1

Вместо:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

Попробуйте:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Если это не работает, добавьте также:

  if (cell == nil) {
    cell = [[customCell alloc] init];
}

Ответ 2

Хорошо, ваша проблема в том, что вы используете Static cells вместо Prototype cells. Просто измените свой тип содержимого UITableView.

Prototype cells option

Ответ 3

Хорошо, мой проект, наконец, работает. Некоторые ошибки появились о вещах, которые я удалил, и я больше не могу их найти.

Я только что удалил каждый TableViewCell, я должен был создать новый уникальный UITableViewCell со следующими свойствами:

класс: customCell

Стиль: Основной (но он также работает с Custom)

Идентификатор: Cell1

Спасибо за вашу помощь ssantos, Abdullah Shafique и bilobatum.

Ответ 4

Если ваша ячейка таблицы является подклассом UITableViewCell, вы не используете стиль "Basic" для ячейки. Измените параметр стиля в инспекторе атрибутов на "Пользовательский".

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

Ответ 5

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}

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

Ответ 6

Если вы намеренно используете Static UITableViewCells, вам не нужно внедрять обычные методы UITableView (numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
UITableView будет автоматически заполняться из ячеек, определенных в вашем раскадровке. Вы в конечном итоге используете tableView: cellForRowAtIndexPath: для форматирования данных в ячейках. Вы используете [super tableView: cellForRowAtIndexPath:], чтобы получить tableViewCell, а затем ReuseIdentifier, теги или indexPath, чтобы сопоставить ячейку с данными, которые идут с ней.

Ответ 7

попробуйте использовать класс customCell вместо UITableViewCell класса.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

return cell;
}

Ответ 8

Причина этой проблемы очень ясна из исключения:

Одним из решений этой проблемы является зарегистрировать класс для идентификатора

В Swift это можно сделать следующим образом

tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")

Ответ 9

В моем случае раскадровка, в которой я определил отсутствующий UITableViewCell, была локализована.

Ответ 10

Прокомментируйте весь код в приложении: didFinishLaunchingWithOptions (AppDelegate), но верните YES и повторите попытку.

Ответ 11

Я столкнулся с этой проблемой при представлении UITableViewController, имеющего собственную ячейку из другого диспетчера представлений. В качестве обходного пути я создал его из раскадровки и решил проблему.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "YourTableViewController")
self.present(controller, animated: true, completion: nil)