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

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

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

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

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

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

41 ответ

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

шаги:

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

Это, кажется, заставляет XCode связать класс обратно в раскадровку.

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

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

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

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

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

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

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

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

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

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

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

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

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

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

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

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

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

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

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

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

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

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

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

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

5- Очистить и построить цель вашего проекта

Я должен был сделать комбинацию из пары ответов:

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

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

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

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

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

(Щелкните правой кнопкой мыши папку, в которой находился файл -> "Добавить файл в [проект]")

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

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

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

  2. Стоп Xcode

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

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

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

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

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

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

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

  1. Нажав на нужный элемент раскадровки.
  2. Открытие инспектора соединений (правая панель)
  3. Перетаскивание из круга + в область кода. Вот так:

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

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

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

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

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

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

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

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

Короче

Шаг 1.

Целевая селекция

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

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

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

  1. Я убираю проект
  2. Перетащите новую кнопку в контроллер вида.
  3. Постройте проект.
  4. Подключите только что вытащенную кнопку к классу (либо розетка, либо действие).
  5. Тогда вуаля!!! Другие розетки теперь могут быть снова подключены к классу!

Product > Clean (Command - Shift - K) исправил это для меня!

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

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

Хорошо, ребята видели почти все топовые ответы, и ни один не работал для меня.

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

  1. Скопируйте Derived Data адрес из вашего проекта XCode. Это можно сделать с помощью следующего:

Xcode -> Preferences -> Location Tab -> Derived Data

  1. Close Xcode

  2. Теперь перейдите в папку с производными данными и удалите там папку вашего проекта.

Теперь откройте Xcode и вуаля!

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

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

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

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

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

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

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

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

Я просто перезагружаю Xcode и тогда он работает.

Ошибка раскадровки Xcode

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

Эта ошибка также возникает при переименованииMain.storyboard(например, чтобыFoo.storyboard) и попробуйте подключить раскадровку к контроллеру

Чтобы исправить это, просто укажите правильное имя в Info.plist.UISceneStoryboardFileстрока (в противном случае — Foo)

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

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

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

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

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

Это в конце концов исправило это.

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

Попробуйте добавить источник данных (например, расширение для 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's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

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

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