Попередження на дошці розгортки: комірки таблиці-прототипу повинні мати ідентифікатори повторного використання


123

Я отримую це попередження від раскадровки - комірки таблиці-прототипу повинні мати ідентифікатори повторного використання.

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

Будь-які пропозиції?


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

3
Зараз нормально, приятелю. Я знайшов рішення. Значення для Identifier має бути таким же, як ідентифікатор повторного використання. :)
К.Хонда

Ви встановили ідентифікатор для кожної комірки?
Мік Маккаллум

Привіт Хонда! Скажіть, будь ласка, що ви зробили, бо я отримую ту саму помилку.
Варун Мехта

2
Я помітив, що іноді (в даний час використовується остання версія Xcode 5 Beta 5 (5B103i)) виділяються неправильні місця помилки / попередження в дошці розкад. Тож якщо ви натиснете на попередження, воно інколи покаже неправильне місце, де подібне попередження вже може бути виправлене. Я пропоную вручну пройти будь-який із переглядів таблиць у вашій дошці та перевірте, чи є ще якісь комірки з відсутнім ідентифікатором. Вище вирішив моє питання з цим попередженням. Дякую @ K.Honda за запитання, оскільки ця тема допомогла мені зрозуміти, як виправити проблему.
Юстас

Відповіді:


159

Щоб закрити попередження, потрібно вказати ім’я ідентифікатору комірки:

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


14
радий мені. закрити xcode - відкрити його, а потім змінити ідентифікатор
Idan Magled

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

Якщо у вас більше 1 комірки-прототипу, ви повинні дати їм усі показники, інакше просто встановіть номер у комірці прототипу
user1700737

6
Мені довелося видалити папку «Отримані дані» (еквівалент Xcode Windows Reboot) та відновити її, щоб позбутися цього помилкового попередження.
Майкл Макгуайр

Це працювало для мене: закрийте Xcode, відкрийте / Користувачі / Ім'я користувача / Бібліотека / Розробник / Xcode / DerivedData у Finder та видаліть увесь його вміст (не саму папку DerivedData).
dldnh

18

Інший спосіб - встановити властивість таблиці «Прототипні осередки» на нулі в інспекторі атрибутів, якщо ви визначаєте комірку за допомогою .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 все ще не зникає навіть після встановлення повторного ідентифікатора, спробуйте скористатися меню "Продукт -> Очистити". Це допомогло мені, і після цього попередження більше не з’являлося.


2

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

Якщо ви впевнені, що ви позначили всі свої клітинки на Storyboard, відновіть проект - ваше попередження може зникнути (як і у мене).


2

Град, коли для мене працював перезапуск XCode (але, мабуть, це була необхідна лише ручна перебудова).


1

Я отримав це попередження для Xcode 7. Я працюю зі Swift. Я не додав контролер навігації для початкового контролера перегляду. Коли я це зробив .. Я отримав це попередження від StoryBoard. Що я зробив:

  1. Є два сеги
    1. від навігаційного контролера до кореневого виду контролера та
    2. від контролера Root View до початкового контролера View.
  2. Виберіть шва, що з'єднує кореневий контролер перегляду з початковим контролером перегляду.
  3. Назвіть ідентифікатор
  4. Виберіть письмову частину контролера "Прототип" -> там ви побачите ідентифікатор як опцію.
  5. Вставте те саме ім'я ідентифікатора, що було введено раніше.

Попередження йде .. якщо не очистити SDK :)


1

Не забудьте встановити ідентифікатор повторного використання на об'єкті, а не ідентифікатор відновлення . Обидва доступні через дошку розкадрування та легко плутати.

У XML-файлі розкадрівки ви хочете налаштувати reuseIdentifier, а не restorationIdentifier.


0

Я помітив, що ця помилка виникає, коли у вас є кілька комірок-прототипів (у властивостях табличного перегляду) і ви не дали всім їм повторно використовувати ідентифікатори.


Я теж бачив це, чи є спосіб назвати всі клітини одночасно або є інший спосіб видалити ці попередження?
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.