Ошибка в Xcode 6 - у контроллера представления нет розетки с именем (подпредставление)

Я только что получил эту ошибку в одном из моих приложений, и после проверки некоторых других приложений такая же ошибка происходит. Ни один из моих IBOutlets а также IBActions связаны больше. Когда я воссоздаю розетку путем перетаскивания элемента управления в файл .h, розетка по-прежнему отображает ошибку в Инспекторе подключений> Розетки, говоря, что (контроллер представления) не имеет розетки с именем (подпредставление). До сегодняшнего дня у меня не было этой проблемы, так что делать с Xcode 6? Контроллер представления ссылается на правильный класс в Identity Inspector> Custom Class. Я удалил папку с производными данными, удалил ссылку на файл.h, очистил проект и очистил папку сборки. Ничего из этого не сработало, и я не могу прогрессировать в разработке, пока эта проблема не будет устранена.

Розетки показывают восклицательный знак. Обратите внимание на 'easyLabel

Я отключаю easyLabel, и розетка исчезает. Я не могу восстановить его с помощью перетаскивания

Обновление: я только что открыл проект через пару дней, и у моих торговых точек больше нет восклицательного знака рядом с ними, и вновь появилась розетка "easyLabel", которую я отключил. Я ничего не менял, так что, думаю, это ошибка в Xcode 6-6.1.

Обновление 2: эта ошибка вернулась. Восклицательные знаки рядом с каждой торговой точкой. Если я удаляю их, я не могу их повторно добавить. Не могу создать новые торговые точки. Также не может дать контроллеру представления собственный класс. Я действительно просто хочу добиться прогресса в приложении, но эта проблема постоянно повторяется. На самом деле просто терпеть не могу. Любая помощь будет оценена.

14 ответов

Дубликат XCode 6: не может подключить IBOutlet к ViewController, но вот хитрость:

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

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

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

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

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

У меня была точно такая же проблема, и что ломало мои раскадровки, так это то, что мой проект находился в папке /Dropbox (MyName)/projects/

Очевидно что-то в названии папки dropbox с пробелами и () полностью разрывало мою раскадровку, попробуйте то, что я сделал, и полностью переместите ваш проект в другую папку и посмотрите, поможет ли это:)

У меня возникла та же проблема, я изменил класс в разделе "Inspector > Custom Class" на что-то другое, сохранил его, а затем снова установил его на правильный, после чего соединения выглядели нормально.

У меня была эта проблема с подклассом Swift UIViewController. Я удалил исходный вид, который IB создал для меня, и добавил новый вид, к которому я не смог подключиться.

Я пошел в инспектор идентификации владельца файла и попытался снова ввести его, думая, что, возможно, он каким-то образом был изменен. Как ни странно, имя класса не заполнялось автоматически. Казалось, что XCode не смог увидеть мой класс.

Я попытался удалить и повторно добавить оба .swift а также .xib файлы, безрезультатно. XCode позволил бы мне вручную ввести свое имя класса, но он не заполнялся автоматически. Казалось, что он не существует или не подходит для этого контекста.

Оглядываясь назад на мой код, у меня было что-то вроде следующего:

extension SomeViewController {
    func foo() -> Bool {
        return false
    }
}

class SomeViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Компилируется просто отлично, но по догадке я удалил расширение. Я сохранил файл, вернулся к .xibи смог снова установить личность владельца файла с автозаполнением. Я также смог подключить вид.

Было бы плохо, если бы расширения всегда мешали, конечно, поэтому я попытался снова, на этот раз с расширением после класса:

class SomeViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

extension SomeViewController {
    func foo() -> Bool {
        return false
    }
}

Все еще работало в IB. Чтобы проверить работоспособность, я переместил расширение назад перед определением класса, и все снова было срочно обработано.

Я взглянул на *-Swift.h, сгенерированный XCode, и, по крайней мере, по отношению к затронутому классу не было никаких отличий - независимо от того, куда я поместил расширения в файл Swift, они всегда объявлялись после @interface определение фактического класса в заголовке.

Итак, короче говоря, в моем случае это было связано с расширениями Swift (я говорю расширения, потому что в моем реальном коде их много), предшествующими определению класса. Я переместил их после определения класса, и проблема ушла.

Мне пришлось удалить ссылку и добавить обратно в мой проект файл -XIB- для моего контроллера представления. Простое удаление контроллера вида.h/.m не сбрасывало розетки, но удаляло.xib и добавляло его обратно!

Почему бы вам не обновить свой xcode 6.0.1 до xcode 6.1, Apple исправила много ошибок.

Скачать Xcode 6

У меня эта проблема только с @protocol определенный IBOutlets если я не переопределю их в классе реализации.

Вероятно, единственное, что мы можем сделать, это сообщить об ошибке.

Вы получаете ту же проблему, если вы подключаете действия / выходы в Интерфейсном Разработчике вместо помощника редактора? Для действий попробуйте управлять перетаскиванием из вашего объекта в IB к первому объекту респондента (или какому-либо другому классу).

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

Так что, если группа проекта была сломана /classone.m

и на диске он был сломан /classone.m

Разработчик интерфейса не может найти файлы. Переименование группы или папки в соответствии с регистром решило проблему.

У меня была та же проблема, но это было потому, что я изменил имя контроллера представления в Навигаторе проекта на MapViewController, но его имя осталось (ViewController) в коде. как только я изменил это, это сработало

Я обновил свой проект с Xcode 6.x до Xcode 7.x около двух месяцев назад без каких-либо проблем. Но затем этим утром я столкнулся с этой ошибкой. Я попробовал почти все на этой странице, но ничего не получалось. Но тогда решение Джастина Миддлтона дало мне идею.

Когда я переключил свой проект с 10.9 SDK на 10.11 SDK, я решил, что хочу, чтобы мой код оставался обратно совместимым на случай, если мне придется вернуться к Xcode 6.2. Поэтому я поместил код препроцессора вокруг нескольких моих объявлений объектов, например:

// This caused the (!) problem in Interface Builder

#if( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_10 )
@interface CLChatWindowController : NSObject <WebPolicyDelegate, WebUIDelegate, WebFrameLoadDelegate>
#else
@interface CLChatWindowController : NSObject
#endif
...


// Removing all the Preprocessor code fixed the problem

@interface CLChatWindowController : NSObject <WebPolicyDelegate, WebUIDelegate, WebFrameLoadDelegate>
....

Как только я удалил весь код препроцессора, символы (!) В Интерфейсном Разработчике исчезли, и все вернулось на круги своя. Надеюсь, что это помогает кому-то.

У меня была такая же проблема с тех пор, как я использовал XCode 6.1, ответы выше не сработали для меня. (удаление / повторное добавление моих файлов классов, изменение класса на что-то другое, а затем его изменение обратно. Единственное, что я не пробовал, - это создание нового проекта с нуля).

Я случайно заметил, что мой заполнитель 'Application' в MainMenu.xib каким-то образом установил свой класс в NSObject. Изменение этого в NSApplication, казалось, прояснило проблему "нет названного выхода" из всех других моих объектов.

Xcode 6.3.2. Аналогичная проблема. Проект (ы), над которым я работал, неожиданно "отключает" IBOutlets и показывает ошибку

view controller does not have an outlet named (subview)

Проект все еще строится и работает, и если вы наведите курсор мыши на IBOutlets в коде, он думает, что они все еще подключены.

Я прибил это (по крайней мере, в моем случае) к проблеме с хранением проектов в Dropbox (аналогично предыдущему посту). Исправление для меня было супер легким:

Перетащите папку проекта из выпадающего списка на рабочий стол. Затем перетащите проект обратно в Dropbox.

Это решение исправило множество проектов с этой проблемой.

У меня было это в Xcode 7.0.1 на быстром проекте. В частности, соединения ячеек таблиц были разорваны (навсегда), в то время как другие вещи все еще работали. Удаление производных данных, перезагрузка и т. Д. - ничего не получалось.

Мое решение оказалось:

  1. Закрыть проект xcode
  2. Удалить производные данные для проекта (Окно-> Проекты)
  3. Переименуйте всю папку проекта / источника, т.е. проект -> проект-1
  4. (Обновите закладки управления исходным кодом, например, sourcetree, по мере необходимости)
  5. Откройте проект в xcode (из поиска): обратите внимание, что раскадровка и несколько других файлов выделены красным. Удалить ссылки, добавить их заново. Бум, это работает.

Обратите внимание, что удаления ссылки на раскадровку и ее чтения, даже с удаленными производными данными, было недостаточно. Мне было необходимо переименовать всю исходную папку.

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

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