XCode 6: невозможно подключить IBOutlet к ViewController
После обновления до Xcode 6 я открыл старый проект (который содержит подпроект, поэтому он имеет множество целей)
и я заметил, что никакая ссылка из моего Storyboard ViewContoller на относительные объекты не работает.
Например, у меня есть ViewController с TableView внутри, и теперь я не могу ничего делать с ним, потому что соединение отсутствует, я даже не могу переопределить новый IBOutlet в VC, потому что стрелка в раскадровке из VC не будет подключаться ни к чему.
Чтобы быть более ясным:
Класс определен в разделе "Пользовательский класс", поэтому я не могу найти проблему
Что мне делать?
Btw Я использую obj-c не быстро, я нашел некоторый ответ, но все о swift.
Спасибо
Ответы
Ответ 1
Вы также можете видеть, что связь между родительским представлением и пользовательским классом нарушена (больше не видима), что является огромной проблемой.
У меня была такая же проблема с приложением, над которым я работаю, обновляя XCode с 5.xxx до 6.1. Обходной путь, который работал у меня, заключался в том, чтобы удалить ссылку каждого контроллера представления и повторно добавить их в проект...
Каждому, кто стоит перед этой проблемой, здесь (раздражающий) трюк:
- Шаг 1: выберите файлы управления .h и .m..
- Шаг 2: удалите ссылку этих файлов
- Шаг 3: добавьте файлы в дерево проектов
- Шаг 4: откройте раскадровку, в конце концов заново постройте проект и улыбнитесь.
Я могу понять, что эти вещи могут быть ритуально раздражающими, но это сработало для меня... Надеюсь, это поможет кому-то еще!
Ответ 2
В иерархии раскадровки выберите Контроллер просмотра,
В правой секции пользовательского класса Class
выберите раскрывающийся список и ваш желаемый контроллер вида.
Ответ 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. Выберите другое поле в другом поле. Когда вы вернетесь в поле модуля, оно может сказать "нет", но теперь для вашего имени проекта будет выпадающее меню.
- Выберите имя вашего проекта и посмотрите, все ли хорошо.
Если есть проблемы, я буду публиковать фотографии.
Ответ 10
Кажется, проблема с рабочей областью. Попробуйте удалить проект из рабочей области и добавить его снова. Это помогло мне в моем случае.
Ответ 11
У меня это было, повлияло на все проекты на моей машине, быстро и объективно и с ума сошло на века. Наконец, также заметил, что я не мог использовать рефрактор для переименования классов.
Исправление для меня было:
- Закрыть xcode
- Удалить ~/Library/Разработчик/Xcode/DerivedData (просто это само по себе не сработало!!)
- Удалите все пользовательские данные для всех моих проектов, используя следующее из каталога, содержащего все мои проекты, например. /src (будьте осторожны с этой командой!):
найти. -name 'xcuserdata' -exec rm -rf {} \;
Если вы хотите сделать это вручную, просто сделайте следующее для всех своих проектов
Удалить .xcodeproj/project.xcworkspace/xcuserdata
Удалить .xcodeproj/xcuserdata/.xcuserdatad
- Получить Spotlight, чтобы повторно проиндексировать диск, на котором были все мои проекты (не уверен, что это было необходимо
- Перезагрузочная машина
Все возродилось в жизнь!
Ответ 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", сделать ссылку, а затем изменить ее обратно на мой назначенный пользовательский класс контроллера вида. Ссылка осталась, и все было хорошо.