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.
Я не мог найти способ сделать это в конструкторе интерфейса, поэтому сделайте это:
Откройте файл.xib с помощью текстового редактора: щелкните правой кнопкой мыши файл> открыть как> исходный код
в
<objects>
узел найти<placeholder>
узел со свойствомplaceholderIdentifier="IBFilesOwner"
и заменить значение вcustomClass="MyOldControllerName"
с вашим новым именем контроллера:customClass="MyNewControllerName"
И все ваши IBOutlets снова будут работать как обычно.
Спасибо всем, кто прокомментировал.
Это ошибка Xcode 6 / 6.0.1. Скачал и установил версию 6.1 и проблема исчезла.
Хорошо, давайте проверим, если это отсутствие имени модуля.
- В вашей раскадровке ViewController введите имя модуля. (название проекта)
2. Нажмите снаружи в другом поле. Когда вы вернетесь в поле модуля, оно может сказать "нет", но теперь появится название выпадающего меню для вашего проекта.
- Выберите название своего проекта и посмотрите, все ли хорошо.
Если будут проблемы, я выложу фотографии.
У меня 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 и сводил меня с ума на века. Наконец также заметил, что я не мог использовать рефрактор для переименования классов либо.
Исправление для меня было:
- Закрыть xcode
- Удалить ~/Library/Developer/Xcode/DerivedData (просто сделать это самостоятельно не получилось!!)
- Удалите все пользовательские данные для всех моих проектов, используя следующее из каталога, в котором содержатся все мои проекты, например /src (будьте осторожны с этой командой!):
находить. -name 'xcuserdata' -exec rm -rf {} \;
Если вы хотите сделать это вручную, просто сделайте следующее для всех ваших проектов. Удалить.xcodeproj/project.xcworkspace/xcuserdata Удалить.xcodeproj / xcuserdata /.xcuserdatad
- Получить Spotlight для повторной индексации диска, на котором были все мои проекты (не уверен, если это было необходимо
- Перезагрузить машину
Все вернулось к жизни!
У меня была такая же проблема.
Оказывается, я переименовал свой класс контроллера представления и имя файла. В раскадровке у меня было устаревшее значение на правой панели, Custom Class -> Class. Таким образом, IBOutlets не выравнивались, потому что в пропущенном классе их не было, и именно там он ожидал найти определенные выходы.
Заполнение правильного имени класса View Controller в поле Custom Class на правой панели решило мою проблему.
XCode должен быть более подробным, если у вас есть неправильное имя класса в полях Custom Class.
У меня возникла та же проблема, но не было возможности посмотреть ссылку на нее. Единственный способ, которым я смог это исправить, - это изменить класс владельца файла XIB на "UIViewController", создать ссылку, а затем изменить ее обратно на мой предполагаемый класс контроллера пользовательского представления. Ссылка осталась и все было хорошо.
Может быть, попробуйте удалить розетку из меню в раскадровке (на вашем скриншоте) и снова перетащите его из элемента.
В Xcode 6.3 мне нужно было закрыть Xcode и перезагрузить Mac. Перезапуск Xcode сам по себе не сделал этого для меня.
У меня был 6.3 в течение долгого времени, и моя проблема была с новыми проектами, которые я создавал, чтобы протестировать некоторые вещи. Определенно не проблема обновления на этот раз.
Ни одно решение не устранило мою проблему... Но я решил:
- закрыть xcode
- переименование папки проекта
- открыть xcode
и тогда торговые точки снова вернутся
Я надеюсь, что это решение является правильным для людей, которые имеют ту же проблему
Кажется, проблема рабочей области. Попробуйте удалить проект из рабочей области и добавить его снова. Это помогло в моем случае.