Не удалось вставить новое выходное соединение: не удалось найти информацию для класса с именем


281

Я получил ошибку на Xcode, говорящую, что не было никакой информации о контроллере представления.

Не удалось вставить новое выходное соединение: не удалось найти информацию для класса с именем

Почему это происходит?

Снимок экрана 1


2
Я думаю, что об этом спрашивали раньше: stackoverflow.com/questions/17735182/…
Tapani

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

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

Для меня ни одно из вышеперечисленных решений не сработало. Мне пришлось удалить контроллер представления, который я скопировал и снова вставил в свою раскадровку, чтобы использовать его снова. Затем я перетащил новый контроллер представления в раскадровку, и все стало хорошо :). Я надеюсь, что это может помочь кому-то с той же проблемой.
Арслан Салим

Это ошибка в XCode, и я не знаю, почему они не исправляют это. Вы должны закрыть XCode и снова открыть. Когда вы попытаетесь снова поставить розетки, но на этот раз оставьте кучу ENTERS, прежде чем сделать это. Вам не нужно ничего удалять или тратить свое время на другие варианты ... Это решит ваши проблемы.
Mavesonzini

Ответы:


692

Вот некоторые вещи, которые могут это исправить (в порядке возрастания сложности):

  • Очистить проект ( Продукт> Очистить )
  • Вставить вручную

    @IBOutlet weak var viewName: UIView!
    // or
    @IBAction func viewTapped(_ sender: Any) { }

    и контролировать перетаскивание на него (Измените тип по мере необходимости.) Также посмотрите это .

  • Полностью закройте Xcode и перезапустите ваш проект.

  • Удалите папку «Производные данные» (перейдите в XCode> «Установки» > « Местоположения» и нажмите серую стрелку рядом с папкой «Производные данные». Затем удалите папку своего проекта.)
  • Нажмите «Удалить» в классе, удалите ссылку (не «Переместить в корзину») и добавьте ее снова. (см. этот ответ )

не забудьте удалить класс на контроллере представления, чтобы эти шаги работали
reggie

8
Ни один из этих шагов не работал для меня в Xcode 8.3.2. Мне пришлось «Показать инспектора идентификации»> очистить поле «Класс» (выделите имя пользовательского класса и удалить)> повторно ввести имя класса в поле «Класс». Xcode автоматически заполнил имя класса. Затем я нажал Enter.
PeqNP

Добавьте строку alias purgederiveddata='rm -rf ~/Library/Developer/Xcode/DerivedData/*'в ~ / .bashrc, чтобы использовать команду purgederiveddataдля очистки одной командой
eskimwier

Я нашел другой способ исправить эту проблему, это случилось со мной, когда я изменил некоторые параметры сборки, чтобы улучшить мою скорость сборки. stackoverflow.com/a/50555888/2952876
Матиас Ван Хоутт

Я настоятельно рекомендую всем вам попробовать мое решение ниже. Хотелось бы знать, что людям приходится перезагружать свои компьютеры из-за часто встречающейся ошибки.
Стивен Пол

134

Или, если ничего из вышеперечисленного не работает, сначала введите имя розетки в файл, @IBOutlet weak var headerHeightConstraint: NSLayoutConstraint!а затем щелкните и перетащите от розетки в кончике к переменной, которую вы только что программно создали. Это должно работать без каких-либо хлопот очистки, строительства и удаления чего-либо.


4
часто более быстрое решение вместо того, чтобы тратить время на очистку, сборку и т. д. спасибо.
Мохониш

1
Очень хорошо, и как только вы сделаете это, автоматически начнет появляться, спасибо.
AmJa

1
Прежде всего, подключите ваш объект XIB к IBoutlets. Затем попытайтесь связать свои ограничения IBOutlets. без этого он всегда будет показывать ошибку.
Чандрамани

Это также может иметь значение, когда вы пытаетесь вставить новую розетку. Для, верхняя часть списка (там, где есть свободное пространство выше) работал; середины списка нет.
Ричард

1
Это должно быть помечено как лучший ответ. Это проще, быстрее и надежнее. Также это работает все время! Хорошая работа и спасибо
@StephenPaul

52

Просто выполните два следующих шага, чтобы избавиться от этой ошибки

  1. Чистый проект с использованием Product> clean
  2. Запустить проект

Теперь попробуйте добавить действие или розетку. Вот и все.

Счастливое Кодирование


4
Странно ... эти два простых шага помогли решить проблему и для меня. Поэтому я рекомендую сначала попробовать эти простые шаги :-)
перекрестный код

49

Ни один из советов в лучшем ответе не работал для меня. Сходил с ума. Затем заметил, что Помощник редактора каким-то образом был установлен на Вручную, и я был на ViewController.swift (Interface) вместо файла ViewController.swift.

Поменял что и проблема решена. Немного смущает, но эй, мы все учимся.

введите описание изображения здесь


1
Спасатель ответ! Ни один из других ответов не решил это раз и навсегда. Очень жаль, что описание ошибки не дает ни малейшего намека на то, что вы можете оказаться в файле worng. Спасибо. +1 за изображение все прояснилось.
Паулоко

Я заметил нечто довольно похожее, но другое: в верхнем пути, где отображается имя класса, было только имя класса, но отсутствовал начало пути как myProject> appName> controller, а затем класс. Я выбрал другой класс, затем вернулся к проблемному, и все в порядке
claude31

15

Вот шаги, решенные для меня:

  1. Удалить ссылку на имя класса из View (раскадровка / XIB) и сохранить;
  2. Добавьте имя класса еще раз и сохраните;
  3. Очистить и построить;

Готово !


10

Я была такая же проблема. Я устал ниже решений, но не работал:

  1. Clean Project (cmd + shift + k) и даже Clean Project Build (cmd + shift + alt + k)
  2. Deleted Derived data и Module Cache content

Ниже обойти эту проблему:

  1. Перейти к файлу с исходным кодом и написать IBOutlet / IBActionвручную (предпочтительно копировать вставить)

Снимок экрана 1

  1. Затем перейдите к файлу раскадровки и откройте Utilitesокно
  2. Перейти к Connection Inspector
  3. Затем подключите IBOutletи IBActionзаписанный в исходном файле с Interface Builder.

Снимок экрана 2


Перетаскивание Outlets / Actions вообще не работало, но после того, как я сделал это вручную, все снова заработало.
Джейсон

Это стандартный альтернативный метод создания соединений. В случае действий с переключателями, единственный способ, AFAIK. В раскадровке вы также можете щелкнуть правой кнопкой мыши на контроллере, найти функцию и установить соединение.
краткий

8

У меня такая же проблема. Я понял, что в X-Code Manualэлемент был выбран, когда я пытался создать розетку путем перетаскивания

введите описание изображения здесь

После того, как я установил его на автоматический, он работал

введите описание изображения здесь


У меня была именно эта проблема. Даже не заметил разницу.
Joshua Dance

Большой!!! Я потерял так много времени на этот проект по очистке от ошибок, перезапуску xCode, удалению производных данных, но это было единственное решение, которое работало для меня! Большое спасибо!
Антон Ерегин

7

Я решил эту проблему, программно создав метки и текстовые поля, а затем перетащил их из маленьких пустых кружков слева от кода в компоненты на раскадровке. Чтобы проиллюстрировать мою мысль: я написал @IBOutlet weak var HelloLabel: UILabel!, а затем нажал Command и перетащил код в компонент раскадровки.


Это решение отлично сработало для меня! Кроме того, @IBOutlet weak var myButton: UIButtonя использовал тот же процесс для настройки, @IBAction func doSomething(_ sender: Any) { }а затем подключил эту функцию к UIButton на моей раскадровке. Спасибо за то, что поделились этим @KuboAndTwoStrings
Nii

6
  1. Закройте проект, над которым вы работаете.
  2. Удалите папку вашего проекта «DerivedData». (Эта папка может находиться внутри папки вашего проекта или внутри
    ~/Library/Developer/Xcode/DerivedData/
    (вашего проекта) /), либо в другом месте, которое было настроено вами.
  3. перезапустите свой проект.

4

Я нашел более простой обходной путь, так как эту ошибку можно найти в XCODE 9.

Шаг первый, перейдите в ваш viewcontroller и вручную напишите свойство, которое вы хотите подключить, как в примере ниже, убедитесь, что вы используете формат ниже

@IBOutlet слабый var questionsStackView: UIStackView!

Шаг второй: перейдите к раскадровке и подключите свой вид или что угодно, что вы пытаетесь соединить со свойством, созданным на шаге 1.

Вышеуказанное сэкономит вам время на удаление и очистку производных данных.


3

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

  • В Xcode Menu -> Product->Clean
  • Restart код Xcode

это было единственное решение, которое сработало для меня достаточно забавно.
Джозеф Астрахань

2

В моем случае это был bc. Я выбрал новый файл UIViewController в IB, а затем попытался перетащить его на этот новый контроллер, не удаляя предыдущие подключения в Инспекторе соединений. Сначала удалите их и попробуйте снова.


2

Для меня это сработало, когда на правой вкладке> Локализация я установил флажок на английском. Изначально была проверена только База. После этого у меня больше не было проблем. Надеюсь это поможет!


2

введите описание изображения здесь

Я выбрал опцию Автоматически, чтобы выбрать файл ViewController.swift. И тогда я смогу взять торговые точки.


2

Пожалуйста, выполните следующие два шага только, чтобы избавиться от этой ошибки.

1.  Clean Project using Product -> clean.
2.  Run the Project.

Теперь попробуйте добавить / подключить действия или розетки.

Работает отлично для меня много раз.


1

Это случилось, когда я добавил Swiftфайл в Objective-Cпроект.
Итак, в этой ситуации вы можете сделать это. ,

  • Select MY_FILE.Swift >> Delete >> Remove Reference
  • Select MY_FOLDER >> Add MY_FILE.Swift
  • Voila ! You are good to go .

За это! Я пытался решить эту проблему самостоятельно в течение получаса уже LOL. Подобные проблемы в раскадровке легко исправить. Спасибо! Это мне очень помогло!
Гленн

0

Самое простое решение: - Я использовал xCode 7 и iOS 9.

в твоем .m

удалить #import "VC.h"

сохраните .m и снова подключите свою розетку, все будет работать нормально.


0

Я использовал xCode 7 и iOS 9.

в твоем .m

Удалить #import "VC.h"

сохраните .m и снова подключите свою розетку, все будет работать нормально.

в твоем .m

Добавить #import "VC.h"

сохранить .m


0

Ничего из этого не помогло мне, но я понял это.

Внутри раскадровки я скопировал соответствующий ViewController в буфер обмена и удалил его, после чего снова вставил.

Внезапно все снова заработало!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.