it-swarm.com.ru

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

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

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

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

110
K.Honda

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

enter image description here

149
aleroot

Другой способ состоит в том, чтобы установить свойство Table View 'Prototype Cells' на ноль в Инспекторе Атрибутов, если вы определяете ячейку с помощью .xib программно. 

 Setting prototype cells to 0 in Attributes Inspector

16
bitsand

Поскольку раскадровка на самом деле представляет собой 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.

9
Dmitry Varavkin

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

4
Marcel Wassmer

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

2
Hannele

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

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

2
Sitric

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

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

1
pkamb

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

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

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

1
Mili

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

0
Tjalsma

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

0
Vincent

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

-(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;
}
0
Mukesh