"Не удалось найти информацию для класса с именем ViewController"
Эта ошибка сводила меня с ума с тех пор, как я начал использовать Xcode (4.6.3). Всякий раз, когда я пытаюсь связать элемент раскадровки с моим кодом, я получаю сообщение об ошибке:
Не удалось найти информацию для класса с именем ViewController.
Это происходит и с пользовательскими классами. Я пробовал такие методы, как:
- Удаление данных делегата.
- Удаление и повторное добавление классов.
- Перезапуск Xcode.
- Переустановка Xcode.
Я не могу ctrl-перетаскивать, чтобы создавать соединения в любом из моих проектов, независимо от того, какой класс. Та же проблема возникает с совершенно новым шаблоном приложения. Если я наберу код вручную, а затем Ctrl-drag, я могу создать работающее соединение, но не могу добавить его автоматически. Ничто из того, что я смог найти в Интернете, не помогло. Есть указатели?
41 ответ
Что решило эту проблему для меня, так это удаление класса из проекта.
шаги:
- В проводнике файлов проекта (левая панель) найдите класс и щелкните правой кнопкой мыши -> Удалить.
- Удалить ссылку (не переходить в мусорное ведро, так как вы навсегда потеряете класс)
- Щелкните правой кнопкой мыши папку, содержащую класс -> Добавить файлы в...
- Найдите класс, который вы только что удалили в файловой системе
Это, кажется, заставляет 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- Очистить и построить цель вашего проекта
Я должен был сделать комбинацию из пары ответов:
- Удалите имя пользовательского класса из раскадровки.
(Нажмите желтую кнопку в левом верхнем углу контроллера представления в раскадровке -> перейдите в инспектор идентификации (опция + команда + 3) -> удалите имя пользовательского класса вверху)
- Удалить ссылку на файл контроллера представления.
(Щелкните правой кнопкой мыши файл -> удалить -> удалить ссылку)
- Добавьте файл контроллера представления обратно в проект.
(Щелкните правой кнопкой мыши папку, в которой находился файл -> "Добавить файл в [проект]")
- Добавьте имя пользовательского класса обратно в раскадровку.
Для меня сработало следующее:
Выполните "clean" и "clean build folder" (нажмите "option" в меню Product, чтобы получить команду "clean build folder"
Стоп Xcode
В терминале перейдите в папку производных данных:
(/ Users // Library / Developer / Xcode / DerivedData)
Удалите каталог производных данных для вашего проекта.
Волна мертвой курицы в воздухе
Запустить Xcode
Если люди попробуют описанное выше, и все еще не работает, странная уловка, которая сработала для меня, заключалась в добавлении розетки в пробел. Это работает, если нет других линий непосредственно над или под добавляемой вами строкой. Странно, но это сработало!
Для меня работало то, что вместо перетаскивания соединения с кнопки на код было:
- Нажав на нужный элемент раскадровки.
- Открытие инспектора соединений (правая панель)
- Перетаскивание из круга + в область кода. Вот так:
после того, как я связал свой код таким образом, после этого он работал нормально.
Это сработало для меня:
- Выполните "Очистить папку сборки"
(нажмите и удерживайте клавишу "Option" и перейдите в меню "Product", чтобы получить к нему доступ. - Выполните простую "Очистку" (CMD-SHIFT-K) из меню "Продукт".
- Создайте проект, чтобы позволить Xcode компилировать файлы. Кроме того, позвольте ему индексировать файлы при необходимости.
С другой стороны, я не уверен, помогло ли это, но я также удалил Производные данные перед выполнением вышеупомянутых шагов (предпочтения XCode> Местоположения)
Оставайтесь на цели!
Я добавлял новый класс с Xib, и я начал видеть эту проблему, и я провел хорошее время, просматривая ответы здесь и выясняя, имеет ли что-нибудь из этого значение.
Как это происходит, у меня есть несколько целей в моей рабочей области, и часто мне приходится переключаться между ними.
Оказывается, добавление новых файлов приведет к началу переиндексации в Xcode. Но если вы указываете не на ту цель, тогда индексация, скорее всего, бессмысленна, и во время перетаскивания для подключения Xcode не сможет найти ваш класс.
Короче
Шаг 1.
Убедитесь, что у вас установлен правильный целевой набор, чтобы индексирование имело смысл.
Я попробовал все эти ответы, проблема для меня была связана с тем, что Xcode не смог проиндексировать файлы. Я исправил это, просто выйдя из Xcode и снова открыв проект. Конечно, я сделал это, попробовав все вышеперечисленные решения:p
Это самый легкий шаг, который я сделал, чтобы исправить эту проблему.
- Я убираю проект
- Перетащите новую кнопку в контроллер вида.
- Постройте проект.
- Подключите только что вытащенную кнопку к классу (либо розетка, либо действие).
- Тогда вуаля!!! Другие розетки теперь могут быть снова подключены к классу!
Выберите ViewController в storyBoard, удалите текущее значение на правой панели/"Класс клиента"/"Класс", затем повторно добавьте класс управления (тип: "SampleViewController"...), введите. -> Это работает для меня
У меня была похожая проблема: "Не удалось найти класс с именем...", и причина была глупой с моей стороны, как только я понял это. Убедитесь, что вы не перетаскиваете из элемента в интерфейс - убедитесь, что он перетаскивается в сам класс
Хорошо, ребята видели почти все топовые ответы, и ни один не работал для меня.
Так что для меня сработало следующее:
- Скопируйте
Derived Data
адрес из вашего проекта XCode. Это можно сделать с помощью следующего:
Xcode -> Preferences -> Location Tab -> Derived Data
Close Xcode
Теперь перейдите в папку с производными данными и удалите там папку вашего проекта.
Теперь откройте Xcode и вуаля!
Обычно, когда это происходит со мной, я просто еще не сохранил код для класса. Просто перейдите к коду и нажмите cmd+s, и это часто решает проблему правильно.
Как показывает мой опыт тестирования, если вы удалите класс, который был связан с XCode, и затем добавите файл снова, то эта проблема возникнет.
Я пытался ВСЕ!
Убедитесь, что имя класса вашего UIViewController не содержит слова "Test"
Сообщение об ошибке отправлено.
Ни один из вышеперечисленных шагов не помог мне, но я думаю, что, возможно, обнаружил проблему. По крайней мере, это то, что сработало для меня, и это не ошибка в XCode.
Когда в редакторе помощника посмотрите на верхнюю часть окна, в котором есть код для вашего viewController. Третий вариант справа, вероятно, говорит "Ручной", но он должен сказать "Автоматический". Как только я изменил это, проблема была решена!
Ошибка раскадровки 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.
}