Ошибка 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 не был добавлен, поэтому он дал мне ошибку..

enter image description here


Это может произойти в любом Xcode выше 6.0. Это произошло со мной после переименования некоторых классов ViewController в Swift project (но я думаю, что это произойдет и с Obj-C). Вам просто нужно открыть построитель интерфейса, перейти к инспектору идентификаторов ViewController, который переименовал свой класс, выбрать класс и нажать Enter. Это переназначит переименованный класс выбранному ViewController, а также сбросит значение модуля, которое теряется после переименования класса.

обновление для Xcode 8.1 (наверное 8.0 тоже):

в Xcode 8.1 просто падает. Просто и досадно просто падает и ничего не печатает. Я гонялся за этой призрачной аварией целый час, только чтобы узнать, что это было то же самое - неназначенный класс В IB. Если вы получаете фантомные сбои, сначала дважды проверьте IB для неназначенных классов.


иногда контроллер, который вы предоставляете, теряет свое целевое членство в текущем приложении. В этом случае нажатие enter в поле "модуль" ничего не сделает. Перейдите к контроллеру и убедитесь, что для текущего приложения установлено целевое членство.


проект с несколькими целями

в моем случае я работаю над проектом с несколькими целями, и проблема была" наследовать от цели " не отмечена. Выбор "наследовать от цели" решил мою проблему

enter image description here


мой ответ: установите пользовательский модуль равным имени пользовательского Pod (в моем примере - имя пользовательского класса), как на скриншоте прилагается

Это решение для конкретном случае: для таможни вид классы Pod (или Карфаген) рамках.

Инфраструктура: XCode8, Swift3

enter image description here


я исправил это, сделав прямо противоположное тому, что предложил Чикабуз (спасибо, что указал на это). В файле раскадровки найдите следующее:

<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 от управления образования.

сделал трюк для меня.


выбор правильного Module для меня Custom Class Я решил эту проблему .

вот это :

enter image description here


я столкнулся с этой проблемой в Xcode 6.1, когда я удалил Main.storyboard, the LaunchScreen.xib файл и значение по умолчанию ViewController классы из моего проекта.

я исправил это, удалив Launch Screen File и Main Interface записи Info.plist


У меня была та же проблема.

в моем случае Xcode не добавлял мой пользовательский класс в: Target > Build Phase > Compile Sources.

поэтому я рекомендую вам проверить, если ваш CustomClass.м там.

enter image description here

Я надеюсь, это поможет вам.


проверьте, имеет ли ваш класс право Целевые Членские.


Я везде гуглил для этого. Ни один из ответов не работает для меня, пока я не встретил 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 флаг, и он тоже работал хорошо.

enter image description here


в моем случае класс ссылки в раскадровке / xib не было Целевые Членские set.

чтобы исправить, дайте этому классу .h и .m файлы того же целевого членства, что и другие классы.

No target membership set.


Я столкнулся с проблемой, когда я портировал раскадровку из Swift project в Objective-c project, заметив vvkuznetsov это, оказалось, что два проекта используют один и тот же идентификатор. I "продукт - > очистить" и нажмите клавишу Enter в текстовом поле модуль и класс. вопрос исчез.


моим решением было удалить @objc из пользовательского определения класса.


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

используя 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. Там вы идете.