XCode 6: невозможно подключить IBOutlet к ViewController

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

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

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

screenshot

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

screenshot

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

Спасибо

Ответы

Ответ 1

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

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

Каждому, кто стоит перед этой проблемой, здесь (раздражающий) трюк:

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

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

Ответ 2

В иерархии раскадровки выберите Контроллер просмотра,

enter image description here

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

enter image description here

Ответ 3

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

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

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

@property NSString *temp;

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

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

Ответ 4

Кажется, сначала напечатайте выход (быстро):

@IBOutlet weak var someViewOutlet: UIView!

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

  • В <objects> node найдите <placeholder> node с свойством placeholderIdentifier="IBFilesOwner" и замените значение в customClass="MyOldControllerName" новым именем контроллера: customClass="MyNewControllerName"

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

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

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

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

Ответ 10

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

Ответ 11

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

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

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

найти. -name 'xcuserdata' -exec rm -rf {} \;

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

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

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

Ответ 12

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

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

Заполнение правильного имени класса контроллера просмотра в поле "Пользовательский класс" на правой панели исправлено моя проблема.

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

Ответ 13

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

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

а затем выходы снова вернутся

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

Ответ 14

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

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

Ответ 15

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

Ответ 16

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