it-swarm.com.ru

Xcode 6: не удается подключить IBOutlet к ViewController

После обновления до Xcode 6 я открыл старый проект (который содержит подпроект, поэтому у него много целей) И я заметил, что ни одна ссылка из моего Storyboard ViewContoller на соответствующие объекты не работает.

Например, у меня есть ViewController с TableView внутри, и теперь я не могу ничего с ним сделать, потому что отсутствует соединение, я даже не могу переопределить новый IBOutlet в VC, потому что стрелка в раскадровке из VC не подключится ни к чему.

Чтобы быть более понятным: 

screenshot

Класс определен в разделе Custom Class, поэтому я не могу найти проблему

screenshot

Что мне делать? Кстати, я использую obj-c, а не Swift, я нашел какой-то связанный ответ, но все о Swift.

19
lorenzop

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

У меня была та же проблема с приложением, над которым я работаю, обновляя XCode с 5.xxx до 6.1. Обходной путь, который работал для меня, состоял в том, чтобы удалить ссылку каждого контроллера представления и повторно добавить их в проект ...

Для всех, кто сталкивается с этой проблемой, вот (раздражает) трюк:

  • Шаг 1 : выберите .h и .m просмотр файлов контроллера
  • Шаг 2 : удалить ссылку из этих файлов
  • Шаг 3 : заново добавить файлы в дерево вашего проекта
  • Шаг 4 : откройте раскадровку, в итоге пересоберите проект и улыбнитесь

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

50
JJBoursier

В иерархии раскадровок выберите View Controller,

enter image description here

В правой части раздела Custom Class Class выберите раскрывающийся список и нужный контроллер представления.

enter image description here

22
Tom Howard

Я столкнулся с подобным поведением в Xcode 6.1.1 при попытке добавить первый выход в новое представление.

Попытка удаления ссылок и добавления файлов снова, как предложено выше, безуспешно.

То, что я нашел, работало, так это написание первого свойства нового представления вручную. Я просто заскочил:

@property NSString *temp;

Тогда я мог бы прикрепить свои розетки обычным способом. Просто удалите временное свойство, как только вы добавили свой первый выход.

Надеюсь это поможет.

5
Adam Nierzad

Кажется, сначала набираешь розетку (Swift):

@IBOutlet weak var someViewOutlet: UIView!

а затем перетаскивая из IB выход в крайний правый тип в приведенном выше коде работает.

Перезапуск Xcode решает проблему (иногда). Используя Xcode 6.1

4
hugey

Может быть, я могу помочь. В моем случае проблема заключалась в том, что файл viewController.Swift не был подключен к StoryBoard. Решение состоит в том, чтобы щелкнуть в верхней границе представления на раскадровке рядом с 3 значками (View Controller, First Responder и Exit) ... теперь посмотрите в области утилит, выберите Identity Inspector, а в «Custom Class» выберите Пользовательский вид контроллера.

Надеюсь это поможет. Xcode это сложно!

4
user462990

Вот правильное решение, я верю.

Если вы переименовали контроллер в коде, вам необходимо обновить файл .xib.

Я не мог найти способ сделать это в конструкторе интерфейса, поэтому сделайте это:

  1. Откройте файл .xib с помощью текстового редактора: щелкните правой кнопкой мыши файл> открыть как> исходный код 

  2. В узле <objects> найдите узел <placeholder> со свойством placeholderIdentifier="IBFilesOwner" и замените значение в customClass="MyOldControllerName" именем вашего нового контроллера: customClass="MyNewControllerName"

И все ваши IBOutlets снова будут работать как обычно.

2
Daniel Moreira

Спасибо всем, кто прокомментировал.

Это ошибка Xcode 6/6.0.1. Скачал и установил версию 6.1 и проблема исчезла.

1
lorenzop

В Xcode 6.3 мне нужно было закрыть Xcode и перезагрузить Mac. Перезапуск Xcode сам по себе не сделал этого для меня.

У меня был 6.3 в течение долгого времени, и моя проблема была с новыми проектами, которые я создавал, чтобы протестировать некоторые вещи. Определенно не проблема обновления в этот раз.

0
Dan Loughney

ни одно решение не устранило мою проблему ... Но я решил:

  • закрыть xcode
  • переименование папки проекта
  • открыть xcode

и тогда торговые точки снова вернутся

Я надеюсь, что это решение является правильным для людей, которые имеют ту же проблему

0
Kazzar

Хорошо, давайте проверим, если это отсутствие имени модуля.

  1. В вашей раскадровке ViewController введите имя модуля. (название проекта)

2. Нажмите снаружи в другом поле. Когда вы вернетесь в поле модуля, оно может сказать «нет», но теперь появится название выпадающего меню для вашего проекта.

  1. Выберите название своего проекта и посмотрите, все ли хорошо.

Если будут проблемы, я выложу фотографии.

0
Steve Rosenberg

Кажется, проблема рабочей области. Попробуйте удалить проект из рабочей области и добавить его снова. Это помогло в моем случае.

0
P_O

У меня Xcode 6.3 и увидел аналогичную проблему. Наконец, несколько изменений в файле .h решили мою проблему. Если ваш интерфейс имеет IBOutlet, определенный как 

@interface NavigationViewController :UIViewController
{
  IBOutlet UILabel *lblName;
}

измените это на и в .m файле добавьте @synthesize lblName;

@interface NavigationViewController :UIViewController
{
   __weak  UILabel *lblName;
}

@property (nonatomic, weak) IBOutlet UILabel *lblName;
0
Ram G.

У меня возникла та же проблема, без возможности просмотра ссылки на. Единственный способ, которым я смог это исправить, - это изменить класс владельца файла XIB на «UIViewController», создать ссылку, а затем изменить ее обратно на мой предполагаемый класс контроллера пользовательского представления. Ссылка осталась и все было хорошо.

0
theaceofthespade

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

0
Antoine

У меня была такая же проблема. 

Оказывается, я переименовал свой класс контроллера представления и имя файла. В раскадровке у меня было устаревшее значение на правой панели, Custom Class -> Class. Таким образом, IBOutlets не выравнивались, потому что в пропущенном классе их не было, и именно там он ожидал найти определенные выходы.

Заполнение правильного имени класса View Controller в поле Custom Class на правой панели решило мою проблему.

XCode должен быть более подробным, если у вас есть неправильное имя класса в полях Custom Class.

0
styler1972

Я имел это, затронул все проекты на моей машине, Swift и Objective C и сводил меня с ума на века. Наконец также заметил, что я не мог использовать рефрактор для переименования классов либо. 

Исправление для меня было:

  1. Закрыть xcode
  2. Удалить ~/Library/Developer/Xcode/DerivedData (просто сделать это самостоятельно не получилось !!)
  3. Удалите все пользовательские данные для всех моих проектов, используя следующее из каталога, в котором содержатся все мои проекты, например,/src (будьте осторожны с этой командой!):

находить . -name 'xcuserdata' -exec rm -rf {} \;

Если вы хотите сделать это вручную, просто сделайте следующее для всех ваших проектов Удалите .xcodeproj/project.xcworkspace/xcuserdata Удалите .xcodeproj/xcuserdata/.xcuserdatad

  1. Получить Spotlight для повторной индексации диска, на котором были все мои проекты (не уверен, если это было необходимо
  2. Перезагрузить машину

Все вернулось к жизни!

0
Tim Teece