IBOutlets не отображаются в XCode 6.1 (6A1052d)

Это довольно серьезная проблема: в IB не появляются Outlets.

Чтобы воспроизвести:

1) Я объявляю переменную IBOutlet, например, в файле .h моего контроллера представления.

@property (nonatomic, strong) IBOutlet UILabel* testlabel;

2) Я открываю раскадровку, нажимаю на контроллер просмотра. - Если это новый проект, то нет списка "Торговых точек". - Если это старый проект с уже определенными выходами, список "Выходы" содержит предыдущие выходы, но не тот, который я добавил.

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

РЕДАКТИРОВАНИЕ Я добавляю видео на YouTube, показывающее проблему, на случай, если я не объяснил ее должным образом. Если я забыл что-то очевидное, я рад, что надо мной смеются :) Тем не менее, я всегда следил за одними и теми же действиями, и розетки всегда были в списке.

РЕДАКТИРОВАТЬ 2 Для ясности я удалил объявление ivar, так как оно привлекало больше всего внимания.

Выпуски на YouTube

EDIT 3 Хорошо, я, похоже, столкнулся с проблемой, замеченной ранее на этот вопрос и другой вопрос. По сути, если я открою раскрывающийся список пользовательских классов, я увижу только некоторые «стандартные» классы, такие как UIViewController. Если я выберу любой из них, я получу Розетки. Например, для UIViewController у меня всегда есть вид->Вид. Однако классы моего проекта не находятся в раскрывающемся списке. Ввод имени вручную вроде работает, но на самом деле это не так. Должна быть какая-то проблема с индексацией (за исключением того, что я уже удалил все из

~/Library/Developer/Xcode/DerivedData/

безуспешно. Если вы хотите попробовать, я разместил свой код на GitHub. Это не показывает Outlets для меня, но это показывает для ряда других людей, так что, строго говоря, это не «ошибка» с кодом. Это больше проблема XCode. Любая помощь приветствуется!

РЕДАКТИРОВАТЬ 4 Я думаю, вот в чем проблема: посмотрите справа. В раскрывающемся меню не отображается класс ViewController.h. Если я ввожу его вручную, он, кажется, распознает его, но на самом деле я подозреваю, что это не так. Раньше я всегда видел полный список классов моего проекта в раскрывающемся меню. Список классов является общим


person puntofisso    schedule 16.11.2014    source источник
comment
Это ивар. Это путь из предыдущих свойств, и он все еще работает, если вы не хотите синтезировать ивар.   -  person uchuugaka    schedule 16.11.2014
comment
Иварная часть кода на самом деле не имеет значения. Проблема в том, что свойство является муравьем IBOutlet, которое не отображается в списке. Я добавил видео, чтобы прояснить проблему.   -  person puntofisso    schedule 16.11.2014
comment
Можете ли вы попробовать это с бета-семечком Xcode 6.1.1?   -  person Matt Gibson    schedule 17.11.2014
comment
@MattGibson Я загружаю его, пока мы говорим :) Надеюсь, это решит проблему. Но даже если это так, остается немного любопытства, как обновить список...   -  person puntofisso    schedule 17.11.2014
comment
@MattGibson такая же проблема и с 6.1.1. Я начинаю впадать в отчаяние...   -  person puntofisso    schedule 17.11.2014
comment
Можете ли вы воспроизвести его с помощью ванильного тестового проекта? Возможно, имя ViewController просто универсальное, что произойдет, если вы дадите ему более уникальное имя?   -  person uchuugaka    schedule 17.11.2014
comment
@uchuugaka это не проблема кода (см. мои РЕДАКЦИИ выше). Это проблема кэширования XCode. Во всяком случае, я нашел решение. Я собираюсь сообщить об этом.   -  person puntofisso    schedule 18.11.2014
comment
Да. Я думаю, что скоро это будет исправлено. В предыдущей сборке была более серьезная проблема с индексацией кеша, и для нее были обходные пути и исправления.   -  person uchuugaka    schedule 18.11.2014


Ответы (4)


Я нашел «решение» или обходной путь. Удалить данные XCode недостаточно, и недостаточно просто перезапустить его. Следующая последовательность заставляет Розетки волшебным образом снова появляться и работать правильно:

  1. Чистый проект
  2. Закрыть XCode
  3. Удалите все содержимое ~/Library/Developer/Xcode/DerivedData/
  4. Перезагрузите MacOS

Сделав это, когда вы снова откроете XCode и переиндексируете, он отобразит выходы, как и ожидалось.

person puntofisso    schedule 18.11.2014
comment
Это единственное решение, которое сработало для меня. Вам нужно ТОЧНО выполнить 4 шага. - person Moe Salih; 14.12.2014
comment
Просто ради того, чтобы кто-нибудь читал: возможная глупая проблема заключается именно в следующем: правильно ли имя каждого класса/имени файла? Я несколько раз дублировал класс и не смог правильно назвать классы/файлы. (Итак, у меня было два CarCell, отсутствовал BoatCell и т. д.) Если вы сделаете такое, именно проблема, обсуждаемая здесь, появится в раскадровке. Надеюсь, это поможет кому-то! - person Fattie; 20.03.2016

просто объявите IBOutlet следующим образом:

@property (nonatomic, strong) IBOutlet UILabel* testlabel
person nburk    schedule 16.11.2014
comment
Да - извините, я не написал здесь, что у меня было в моем коде. Я отредактирую. - person puntofisso; 16.11.2014
comment
Итак, просто повторю: у меня есть свойство, объявляющее переменную как IBOutlet, точно так же, как в вашем примере. У меня также есть декларация ivar. Теперь: для моих старых розеток (тех, которые я объявил до сегодняшнего дня) у меня есть соответствующая запись в списке розеток в раскадровке, когда я фокусируюсь на контроллере представления; testlabel не появляется. - person puntofisso; 16.11.2014
comment
Кстати, я отредактировал вопрос и добавил ссылку на видео, показывающее, в чем проблема. Рад, что мне сказали, что я делаю что-то принципиально неправильное :) - person puntofisso; 16.11.2014

Возможно, это очень глупо, но пробовали ли вы Clean Project Folder, затем удалить DerivedData (пока раскадровка не открыта), немедленно выйти из Xcode и снова открыть Xcode, а затем построить свой проект?

person Can Poyrazoğlu    schedule 16.11.2014

Я столкнулся с похожей проблемой, но это было связано с ошибкой в ​​Xcode (8.2), когда Interface Builder не показывает выходы в инспекторе подключений, если эти выходы были объявлены с аннотацией типа _Nullable для совместимости со Swift.

Использование nullable внутри скобок @property помогает обойти проблему.

(Я знаю, что в исходной проблеме плаката не использовались аннотации типов или Xcode 8, поэтому он немного отличался, но сводка вопроса соответствовала моему поиску в Интернете, поэтому я упоминаю об этом для будущих искателей.)

person user2067021    schedule 12.01.2017