"Не удалось найти информацию для класса с именем ViewController"

Эта ошибка сводила меня с ума с тех пор, как я начал использовать Xcode (4.6.3). Всякий раз, когда я пытаюсь связать элемент раскадровки с моим кодом, я получаю сообщение об ошибке:

Не удалось найти информацию для класса с именем ViewController.

Это происходит и с пользовательскими классами. Я пробовал такие методы, как:

  • Удаление данных делегата.
  • Удаление и повторное добавление классов.
  • Перезапуск Xcode.
  • Переустановка Xcode.

Я не могу ctrl-перетаскивать, чтобы создавать соединения в любом из моих проектов, независимо от того, какой класс. Та же проблема возникает с совершенно новым шаблоном приложения. Если я наберу код вручную, а затем Ctrl-drag, я могу создать работающее соединение, но не могу добавить его автоматически. Ничто из того, что я смог найти в Интернете, не помогло. Есть указатели?

Ответ 1

То, что решило эту проблему для меня, фактически удалило класс из проекта.

Шаги:

  • В проводнике файлов проекта (слева) найдите класс и щелкните правой кнопкой мыши → Удалить
  • Удалить ссылку (не переходите к корзине, так как вы потеряете класс навсегда)
  • Щелкните правой кнопкой мыши папку, содержащую класс → Добавить файлы, чтобы...
  • Найти класс, который вы только что удалили в файловой системе

Это, похоже, вынуждает Xcode связать класс с раскадрой.

Примечание: для меня следующее работа не:

  • Закрытие Xcode
  • Очистка проекта
  • Удаление имени класса из раскадровки и повторного ввода его

Я думаю, что это ошибка в части Apple

Ответ 2

В случае, если кто-то все еще разочарован этим, есть трюк, чтобы заставить все работать.

То, что я делаю, это вручную ввести выход в мой класс, например: @IBOutlet weak var someView: UIView! и перетащить из кода в представление в IB или раскадровке. После этого я могу перетащить из IB/Storyboard в свой класс, чтобы сделать подключения, помощники редакторов распознают класс в "Автоматическом" и т.д.

Работает каждый раз.

Ответ 3

Просто перезапустите свой Xcode... Это работает для меня!!!

Ответ 4

Для меня удаление их из вашего целевого членства в правом столбце и добавление их снова сделали трюк введите описание изображения здесь

Ответ 5

Иногда Xcode делает это из-за того, что VC не ссылается на файл класса. Простое решение для этого:

написать свойство вручную, как указано.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Это создаст пустой знак ссылки перед @IBOutlet, откройте ваш проект в помощнике редактора, затем нажмите знак ссылки enter image description here и перетащите в представление, к которому вы хотите подключиться (я подключился к TableView). и это все. Наслаждайтесь счастливым кодированием !!!

Ответ 6

следующие шаги работают для меня, надеюсь, что это работает и для вас.

1- Вам нужно снова открыть проект после закрытия Xcode.

2 Дождаться индексации файлов проекта

3- Проверьте, работает ли он или нет

4- Если все еще не работает, следуйте шагу 5, если вы не счастливы за вас:)

5- Очистить и создать цель проекта

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

Ответ 7

У меня только была эта проблема в апреле 2017 года с Xcode 8

Просто создавая розетку с помощью кода и компилируя это исправлено. например:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Вы должны любить Xcode...

Редактировать: Все еще происходит в Xcode 9

Ответ 8

Я попробовал все, и это не сработало, поэтому для меня то, что сработало, это:

  • Очистите папку Build и проект.
  • Открытые проекты (Окно → Проекты)
  • Найдите свой проект в списке и удалите производные данные
  • Закрыть Xcode
  • Перезагрузите компьютер (не выбирая повторно открывать открытые окна)
  • запустить Xcode
  • Работа!

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

Ответ 9

Для меня сработало следующее:

  1. Выполните "clean" и "clean build folder" (нажмите "option" в меню Product, чтобы получить команду "clean build folder"

  2. Стоп Xcode

  3. В терминале перейдите в папку производных данных:

    (/Users//Library/Developer/Xcode/DerivedData)

Удалите каталог производных данных для вашего проекта.

  1. Волна мертвой курицы в воздухе

  2. Запустить Xcode

Ответ 10

Мне пришлось сделать комбинацию из двух ответов:

  • Удалить имя пользовательского класса из раскадровки.

(Нажмите желтую кнопку в левом верхнем углу контроллера просмотра в раскадровке → перейдите к инспектору идентификации (опция + команда + 3) → удалите имя пользовательского класса вверху)

  1. Удалить ссылку на файл контроллера вида.

(Щелкните правой кнопкой мыши файл → удалить → удалить ссылку)

  1. Добавьте файл контроллера просмотра обратно в проект.

(Щелкните правой кнопкой мыши папку, в которой был файл → "Добавить файл в [проект]" )

  1. Добавить имя пользовательского класса обратно в раскадровку.

Ответ 11

Если люди пробуют это, и все еще не работает, странный трюк, который работал у меня, добавлял выход в кусок пробела. Он работает, если нет других строк непосредственно над или под строкой, которую вы добавляете. Странно, но это сработало!

Ответ 12

Что сработало для меня, вместо того, чтобы перетаскивать соединение с кнопки на код, было:

  • Щелчок по нужному элементу раскадровки.
  • Открытие инспектора подключения (правая панель)
  • Перетаскивание из + круга в область кода. Вот так:

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

Ответ 13

Я пробовал все эти ответы, проблема для меня была связана с тем, что Xcode не смог индексировать файлы. Я исправил это, просто прекратив Xcode и вновь открыв проект. Конечно, я сделал это, пробовав все вышеперечисленные решения: p

Ответ 14

Продукт > Clean (Command - Shift - K) исправил его для меня!

Ответ 15

Это шаг EASIEST, который я сделал для устранения этой проблемы.

  • Я очищаю проект
  • Перетащите новую кнопку в контроллер вида.
  • Создайте проект.
  • Подключите вновь перетаскиваемую кнопку к классу (выход или действие).
  • Тогда вуаля!!! Теперь можно снова подключить другие устройства к классу!

Ответ 16

Оставайтесь на цели!

Я добавлял новый класс с Xib, и я начал видеть эту проблему, и я провел хорошее время, просматривая ответы здесь и выясняя, имеет ли что-нибудь из этого значение.

Как это происходит, у меня есть несколько целей в моей рабочей области, и часто мне приходится переключаться между ними.

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

Короче

Шаг 1.

Target Seledction

Убедитесь, что у вас установлен правильный целевой набор, чтобы индексирование имело смысл.

Ответ 17

Это сработало для меня:

  1. Выполните " Очистить папку сборки "
    (нажмите и удерживайте клавишу "Option" и перейдите в меню " Product ", чтобы получить к нему доступ.
  2. Выполните простую "Очистку" (CMD-SHIFT-K) из меню " Продукт ".
  3. Создайте проект, чтобы позволить Xcode компилировать файлы. Кроме того, позвольте ему индексировать файлы, если это необходимо.

С другой стороны, я не уверен, помогло ли это, но я также удалил Производные данные перед выполнением вышеупомянутых шагов (предпочтения XCode> Местоположения)

Ответ 18

Выберите ViewController в storyBoard, удалите текущее значение в правой панели/ "Класс клиента" / "класс", затем повторно добавьте класс управления (введите: "SampleViewController"...), введите, - > Это работает для меня

Ответ 19

Как мой опыт тестирования, если вы удалите класс, который был связан в Xcode, а затем снова добавьте файл, эта проблема будет возникать.

Ответ 20

Обычно, когда это происходит со мной, я еще не сохранил код для класса. Просто перейдите к коду и нажмите cmd + s, и он часто исправляет проблему правильно.

Ответ 21

Просто нужно почистить и пересобрать проект.

Ответ 22

Ни один из вышеперечисленных шагов не помог мне, но я думаю, что, возможно, обнаружил проблему. По крайней мере, это то, что сработало для меня, и это не ошибка в XCode.

Когда в редакторе помощника посмотрите на верхнюю часть окна, в котором есть код для вашего viewController. Третий вариант справа, вероятно, говорит "Ручной", но он должен сказать "Автоматический". Как только я изменил это, проблема была решена!

Ответ 23

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

Ответ 24

Я пытался ВСЕ!

Убедитесь, что имя класса вашего UIViewController не содержит слова "Test"

Сообщение об ошибке отправлено.

Ответ 25

Я бы попытался переделать файлы .m и .h и поставить им оригинальное имя, а не общее, например "ViewController". Попробуйте что-то еще в соответствии с тем, что вы хотите, чтобы этот файл выполнялся, и заканчивая в View Controller (т.е. "PizzaDecoraterViewController" )

Затем выберите ViewController, который вы хотите подключить к этим файлам. Убедитесь, что вы выбрали ViewController, а не только объект внутри. Нажмите черную полосу внизу (та, которая имеет значки "Первый ответчик" и "Выход" ). Весь ViewController должен очертить синий цвет. Затем перейдите в раздел "Пользовательский класс" в "Identity Inspector", и в первом поле вы увидите "UIViewController" с серым цветом. В этом поле введите имя файла .h или .m, к которому вы хотите подключиться (Начните вводить PizzaDecorator... и он должен сделать немного автозаполнения). Затем нажмите ENTER.

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

Если вы все сделали так, как сказано выше, он должен работать.

Ответ 26

Как я прокомментировал ответ @ChrisHarrison, эти вещи не сработали для меня, но удалили полученные данные, так как я получил его для работы, удалив полученные данные, как в fooobar.com/questions/31339/...

Ответ 27

Удалите файлы (только ссылки) и снова добавьте файлы.

Ответ 28

Ну, в моем случае то, что сработало (это странно, но работает), следующее:

Попробуйте добавить источник данных (например, расширение для ViewController, например UITableViewDataSource). Xcode попытается перезагрузить ViewController. Затем я написал некоторый метод протокола (в начале Xcode не автозаполнял методы, но написал его вручную), затем я добавил IBOutlets, а затем, наконец, я удалил источник данных.

Пример:

class TestViewController:UIViewController{
    // This viewController presents "Could not find any information for  class named ViewController"
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

Ответ 29

Для меня представление, которое я задал для пользовательского класса, не удалось скомпилировать с помощью конструктора интерфейса. Он был отмечен @IBDesignable.

Удаление @IBDesignable, а затем добавление моих выходов, а затем выделение его как @IBDesignable разрешило проблему в моем случае.

Ответ 30

Просто попробуйте удалить Derived Data для проекта