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


123

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

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

Какие-либо предложения?


Вы либо заполнили неправильное поле, либо у вас более одного представления таблиц. Можете выложить скриншот инспектора атрибутов?
jrturton

3
Теперь все в порядке, приятель. Я нашел решение. Значение идентификатора должно быть таким же, как идентификатор повторного использования. :)
K.Honda

Вы установили идентификатор для каждой ячейки?
Mick MacCallum

Привет, Хонда! Не могли бы вы рассказать мне, что вы сделали, потому что я получаю ту же ошибку.
Варун Мехта

2
Я заметил, что иногда (в настоящее время используется последняя версия Xcode 5 Beta 5 (5B103i)) выделяются неправильные места ошибки / предупреждения в раскадровке. Поэтому, если вы нажмете на предупреждение, оно иногда будет показывать неправильное место, где подобное предупреждение уже могло быть исправлено. Я предлагаю вручную просмотреть любое из табличных представлений, которые есть в вашей раскадровке, и проверить, есть ли другие ячейки с отсутствующим идентификатором. Выше решил мою проблему с этим предупреждением. Спасибо @ K.Honda за вопрос, так как эта тема помогла мне понять, как решить проблему.
Justas

Ответы:


159

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

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


14
довелось мне. закрыть xcode - открыть его, а потом сменить идентификатор
Идан Маглед

7
Когда предупреждение остается, это означает, что где-то на вашей StoryBoard все еще есть ячейка без идентификатора
saimonx

Если у вас более 1 ячейки прототипа, вы должны дать им всем идентификатор, иначе просто установите число
равным

6
Мне пришлось удалить папку Derived Data (эквивалент перезагрузки Windows в Xcode) и перестроить, чтобы избавиться от этого ложного предупреждения.
Майкл Макгуайр,

Это сработало для меня: закройте Xcode, откройте / Users / username / Library / Developer / Xcode / DerivedData в Finder и удалите все его содержимое (а не саму папку DerivedData).
dldnh

18

Другой способ - установить для свойства Table View «Prototype Cells» нулевое значение в Attributes Inspector, если вы определяете ячейку с помощью .xib программно.

Установка ячеек прототипа в 0 в инспекторе атрибутов


9

Поскольку раскадровка на самом деле является 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узел с именем класса, который нужно проверить в редакторе раскадровки Xcode и исправить, в соответствии с ответом aleroot.


1
Фактически вы можете открыть свою раскадровку как код с помощью Xcode, нажав CTRL + щелкнув файл раскадровки Open As>>Source Code
NSTJ

4

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


2

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

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


2

Приветствую: перезапуск XCode у меня сработал (но, вероятно, требовалось просто перестроить вручную).


1

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

  1. Есть два сегмента
    1. из контроллера навигации в контроллер корневого представления и
    2. из контроллера Root View в исходный контроллер View.
  2. Выберите переход, соединяющий контроллер корневого представления с контроллером начального представления.
  3. Назовите идентификатор
  4. Выберите написанную часть контроллера "Prototype" -> там вы увидите идентификатор в качестве опции.
  5. Вставьте то же имя идентификатора, что и ранее.

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


1

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

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


0

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


Я тоже это видел, есть ли способ назвать все ячейки сразу или есть другой способ удалить эти предупреждения?
CatsLoveJazz

1
Каждой ячейке Prototye необходимо собственное уникальное имя. Так что нет возможности сделать это автоматически
Винсент

0

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


0

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

-(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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.