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

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

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

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

Скриншот

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

Скриншот

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

16 ответов

Решение

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

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

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

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

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

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

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

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

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

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

@property NSString *temp;

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

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

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

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

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

@IBOutlet weak var someViewOutlet: UIView!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня 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;

Я имел это, затронул все проекты на моей машине, быстро и объективно 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. Перезагрузить машину

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам