Предупреждение раскадровки: ячейки прототипа таблицы должны иметь идентификаторы повторного использования

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

Я переименовал идентификатор в инспекторе атрибутов, но он, похоже, не удалил предупреждение.

Любые предложения?

Ответ 1

Чтобы закрыть предупреждение, вы должны указать имя идентификатора ячейки:

enter image description here

Ответ 2

Другой способ заключается в том, чтобы установить свойство "Prototype Cells" в представлении таблицы "Ноль" в "Инспекторе атрибутов", если вы определяете ячейку с помощью .xib программно.

Установка ячейки прототипа в 0 в Attributes Inspector

Ответ 3

Поскольку раскадровка на самом деле является XML файлом, поэтому еще один трюк - открыть раскадровку любым текстовым редактором (а не Xcode!) и попытаться найти все узлы tableViewCell. Например, нажмите CMD + F, введите <tableViewCell contentMode="scaleToFill" и нажмите Enter. Вы, вероятно, узнаете, строки, похожие на этот:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Обратите внимание на значение ключа reuseIdentifier="GenericCellID". Строки, которые запускают предупреждение (без идентификаторов повторного использования), не будут иметь такого значения ключа. Посмотрите узлы выше в текстовом редакторе, и вы увидите tableViewController node с именем класса, который вам нужно проверить в редакторе раскадровки Xcode и исправить в соответствии с ответом aleroot.

Ответ 4

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

Если вы уверены, что отметили все свои ячейки в Storyboard, перестройте проект - ваше предупреждение может исчезнуть (как и мое).

Ответ 5

Если ваше предупреждение Xcode по-прежнему не исчезает даже после того, как вы установили идентификатор повторного использования, попробуйте меню "Продукт → Очистить". Это помогло мне, и после этого предупреждение больше не появлялось.

Ответ 6

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

Ответ 7

Идентификатор - это имя, которое вы называете в файле .m. Когда он не заполнен, ссылка на ячейку невозможна.

Ответ 8

Это для установки идентификатора повторного использования программным способом

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

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}

Ответ 9

Я получил это предупреждение для Xcode 7. Я работаю с Swift. Я не добавил контроллер навигации для контроллера начального представления. Когда я это сделал, я получил это предупреждение от StoryBoard. Я сделал это:

  • Есть два сегмента
    • от контроллера навигации до корневого контроллера и
    • от контроллера Root View до вашего начального контроллера View.
  • Выберите сегмент, соединяющий контроллер корневого представления с контроллер начального представления.
  • Назовите идентификатор
  • Выберите "Prototype" написанную часть контроллера → там вы увидите идентификатор в качестве опции.
  • Вставить то же имя идентификатора, что и ранее.

Предупреждение идет.. если не очистить sdk:)

Ответ 10

Убедитесь, что вы устанавливаете Идентификатор повторного использования на объект, а не Идентификатор восстановления. Оба доступны через раскадровку и легко путаются.

В XML файле раскадровки вы хотите установить reuseIdentifier, а не restorationIdentifier.

Ответ 11

Град Мэри: перезапуск XCode работал у меня (но это был, вероятно, просто ручной передел, который требовался).