Ошибка Xcode 6: неизвестный класс В файле построителя интерфейса
Я обновился до Xcode 6 beta 4, и теперь мое приложение постоянно падает с сообщением
неизвестный класс X в файле построителя интерфейса.
Он падает, потому что предположительно Xcode не может найти мои пользовательские классы, которые я связал в моей раскадровке, но он показывает, что они связаны правильно в интерфейсе Xcode.
Я уверен, что все связано правильно. Мой единственный другой вариант-удалить весь файл раскадровки и начать с нуля, потому что он может быть каким-то образом поврежден.
Edit: я также хотел бы добавить, что я попытался очистить, переустановить симулятор, возиться с фазами сборки и т. д. Ничего из этого не работает.
30 ответов
Я решил эту проблему, когда я набирал вопрос. Я решил, что отвечу на свой вопрос и оставлю его здесь для всех, кто может столкнуться с этой проблемой при использовании Xcode 6 beta 4.
чтобы решить эту проблему, вам нужно выбрать каждый из ваших пользовательских объектов класса в раскадровке (это включает в себя любые пользовательские представления, даже сами контроллеры пользовательских представлений).
затем с выбранными объектами откройте инспектор идентификации и в разделе "пользовательский класс" вы увидите модуль выбор. Щелкните в текстовом поле модуль и нажмите enter.
иногда Xcode пропустил customModule="AppName" customModuleProvider="target"
чтобы исправить это, откройте раскадровку в виде исходного кода и замените эту строку:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
для этого:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
У меня была эта проблема после переименования класса swift. Решил его с помощью директивы @objc:
@objc(ForumTopicListViewController) class ForumTopicListViewController
Это работает для меня..
Проверьте скомпилированный источник, является ли этот файл (e.g; ViewController.M) добавлен или нет, в моем случае файл ViewController не был добавлен, поэтому он дал мне ошибку..
Это может произойти в любом Xcode выше 6.0. Это произошло со мной после переименования некоторых классов ViewController в Swift project (но я думаю, что это произойдет и с Obj-C). Вам просто нужно открыть построитель интерфейса, перейти к инспектору идентификаторов ViewController, который переименовал свой класс, выбрать класс и нажать Enter. Это переназначит переименованный класс выбранному ViewController, а также сбросит значение модуля, которое теряется после переименования класса.
обновление для Xcode 8.1 (наверное 8.0 тоже):
в Xcode 8.1 просто падает. Просто и досадно просто падает и ничего не печатает. Я гонялся за этой призрачной аварией целый час, только чтобы узнать, что это было то же самое - неназначенный класс В IB. Если вы получаете фантомные сбои, сначала дважды проверьте IB для неназначенных классов.
иногда контроллер, который вы предоставляете, теряет свое целевое членство в текущем приложении. В этом случае нажатие enter в поле "модуль" ничего не сделает. Перейдите к контроллеру и убедитесь, что для текущего приложения установлено целевое членство.
проект с несколькими целями
в моем случае я работаю над проектом с несколькими целями, и проблема была" наследовать от цели " не отмечена. Выбор "наследовать от цели" решил мою проблему
мой ответ: установите пользовательский модуль равным имени пользовательского Pod (в моем примере - имя пользовательского класса), как на скриншоте прилагается
Это решение для конкретном случае: для таможни вид классы Pod (или Карфаген) рамках.
Инфраструктура: XCode8, Swift3
я исправил это, сделав прямо противоположное тому, что предложил Чикабуз (спасибо, что указал на это). В файле раскадровки найдите следующее:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
и замените его следующим:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">
Я не могу поверить, сколько часов я теряю, обходя ошибки в компиляторе Swift и Xcode 6
я столкнулся с этой проблемой в Xcode 8, чтобы решить эту проблему, мне пришлось изменить раскадровку в текстовом редакторе.
В общем, найдите свой контроль и удалите customModule
и customModuleProvider
от управления образования.
сделал трюк для меня.
я столкнулся с этой проблемой в Xcode 6.1, когда я удалил Main.storyboard
, the LaunchScreen.xib
файл и значение по умолчанию ViewController
классы из моего проекта.
я исправил это, удалив Launch Screen File
и Main Interface
записи Info.plist
У меня была та же проблема.
в моем случае Xcode не добавлял мой пользовательский класс в: Target > Build Phase > Compile Sources.
поэтому я рекомендую вам проверить, если ваш CustomClass.м там.
Я надеюсь, это поможет вам.
Я везде гуглил для этого. Ни один из ответов не работает для меня, пока я не встретил 1 чувак, который попросил меня переместить папку проекта на рабочий стол. Он просто работал автоматически. По-видимому, если у вас есть папка проекта глубоко во многих папках, XCODE фактически ломается.
эти шаги работают для меня.
1) Очистить Данные.
2) удалить .h и .файлы м
3) создать .h и .файлы м снова
Я решил это, открыв файл раскадровки в качестве исходного кода и используя command-F для поиска моего неизвестного класса и удаления связанного с ним пользовательского класса.
что @gfrs сказал правильно, вам нужно установить модуль. Однако однажды я столкнулся с проблемой, что мой класс не был указан в Class
в выпадающем списке. В конце концов я удалил файл swift, перезапустил Xcode и повторно создал файл. Наконец, класс был указан и мог использоваться в раскадровке.
Смотрите также ответ, что похоже на решение "реальной" проблемы, с которой я столкнулся.
Я решил эту проблему, введя имя модуля (к сожалению, выпадающий список ничего не покажет...) в пользовательском классе инспектора удостоверений для всех контроллеров представлений и представлений.
вам также может потребоваться указать целевого поставщика. Для достижения этой цели вы можете открыть раскадровку в режиме sourcecode и добавить атрибут "customModuleProvider" в угловые скобки ViewController и View.
мое решение (Xcode 8.1 Swift 3.0):
неизвестный класс xxx в файле построителя интерфейса.
откройте раскадровку в качестве исходного кода и найдите xxx. Удалить атрибут, содержащий значение xxx. Стройте и бегите.
В моем случае, я добавил флаг -ObjC
до Other Linker Flags
в настройках проекта, чтобы сделать его работу. Также я пробовал с -all_load
флаг, и он тоже работал хорошо.
в моем случае класс ссылки в раскадровке / xib не было Целевые Членские set.
чтобы исправить, дайте этому классу .h
и .m
файлы того же целевого членства, что и другие классы.
Я столкнулся с проблемой, когда я портировал раскадровку из Swift project в Objective-c project, заметив vvkuznetsov это, оказалось, что два проекта используют один и тот же идентификатор. I "продукт - > очистить" и нажмите клавишу Enter в текстовом поле модуль и класс. вопрос исчез.
я исправил это в соответствии с тем, что предложила Лаура, но мне не нужно было воссоздавать файлы.
используя XCode 4, в навигаторе проекта выберите .M файл, содержащий класс, на который он жалуется
перейти к просмотру - > утилиты->показать инспектор файлов (это покажет инспектора файлов справа, с этим .M-file info)
откройте раздел целевое членство и убедитесь, что ваша цель выбрана для этого .м-файл
когда я добавил мой .M файл в мой проект, он не добавил его к моей цели по умолчанию по какой-то причине, и это заставило меня получить ошибку, о которой Вы упомянули.
то, что сработало только для меня, на самом деле добавляет имя модуля в файл xib...
Sooo, файлы xib выглядят следующим образом:
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
ужасное решение, на мой взгляд, но это, предположительно, то, как Apple хочет, чтобы мы сделали это сейчас.
этот вопрос показывает 3 возможные работы вокруг в бета-версии 4 ... по-видимому, Apple не очень помогла в этой ситуации, по мнению некоторых, потому что они называют это "работой по назначению"."
У меня была такая же проблема с Xcode версии 6.1 (6A1052d). Я думаю, проблема возникает, если вы переименовали свой проект App / Xcode.
моим решением было добавить имя модуля в построитель интерфейса вручную.
У меня была эта проблема после того, как я добавил новую цель, а затем создал новый класс с помощью диалога "новый файл", но случайно не смог проверить новую цель, а также исходную цель в диалоговом окне создания, поэтому объект был добавлен только к моей исходной цели. Решение состояло в том, чтобы удалить исходные файлы (только удалить ссылку), а затем добавить их обратно с помощью "добавить файлы", на этот раз проверив обе цели.
решение было для меня. Вам нужно добавить .m класса для этапа построения скомпилированных источников целевого объекта.
надеюсь, что это помогает!
Выберите файл неизвестного класса, откройте вкладку инспектор файлов, Проверьте свое целевое имя в Target Membership
. Там вы идете.