Ошибка Xcode 6: Неизвестный класс в файле Interface Builder

Я обновился до Xcode 6 beta 4, и теперь мое приложение постоянно вылетает с сообщением

Неизвестный класс X в файле Interface Builder.

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

Я уверен, что все правильно связано. Моим единственным другим вариантом может быть удаление всего файла раскадровки и запуск с нуля, потому что он может быть поврежден каким-то образом.

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

Ответы

Ответ 1

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

Чтобы устранить эту проблему, вам нужно выбрать каждый из ваших собственных объектов класса в Storyboard (включая любые пользовательские представления, даже сами пользовательские контроллеры представлений).

Затем, выбрав эти объекты, откройте инспектор идентификации и в разделе "Пользовательский класс" вы увидите параметр "Модуль". Щелкните внутри текстового поля Module и нажмите enter.

Что это! Текущий модуль для всех моих пользовательских объектов, должно быть, был некорректно установлен некорректно в Xcode 6 beta 4. Но визуального указания этого в инспекторе не было.

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

Вот изображение, чтобы сделать вещи более ясными: enter image description here

Ответ 2

Иногда 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">

Ответ 3

У меня была эта проблема после переименования быстрого класса. Решил его с помощью директивы @objc:

@objc(ForumTopicListViewController) class ForumTopicListViewController

Ответ 4

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

Проверьте ваш скомпилированный источник, добавлен ли этот файл (например, ViewController.m) или нет, в моем случае файл ViewController не был добавлен, поэтому он дал мне ошибку.

enter image description here

Ответ 5

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

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

enter image description here

Ответ 6

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

Обновление для Xcode 8.1 (возможно, также 8.0):

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

Ответ 7

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

Ответ 8

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

Это решение предназначено для конкретного случая: для пользовательских представлений классов из Pod (или Карфаген).,

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

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

Ответ 9

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

<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

Ответ 10

Выбор подходящего Module для моего Custom Class я решил эту проблему.

Вот:

enter image description here

Ответ 11

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

В общем, найдите свой контроль и удалите customModule и customModuleProvider из объекта управления.

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

Ответ 12

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

Я исправил его, удалив записи Launch Screen File и Main Interface из Info.plist

Ответ 13

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

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

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

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

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

Ответ 14

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

Ответ 15

Я искал всюду ради этого. Ни один из ответов не работает для меня, пока я не встретил 1 парня, который попросил меня переместить мою папку проекта на рабочий стол. Он просто работал автоматически. Очевидно, если у вас есть папка проекта в глубину во многих папках, XCODE действительно ломается.

Ответ 16

Эти шаги работают для меня.

1) Очистить производные данные.
2) Удалите файлы .h и .m
3) Создайте файлы .h и .m Again

Ответ 17

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

Ответ 18

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

Также посмотрите этот ответ, который, похоже, решает "реальную" проблему, с которой я столкнулся.

Ответ 19

Я решил эту проблему, набрав имя модуля (к сожалению, ниспадающий список ничего не покажет...) в пользовательском классе инспектору идентификации для всех контроллеров и представлений View.

Вам также может потребоваться указать целевого поставщика. Для достижения этой цели вы можете открыть раскадровку в режиме исходного кода и добавить атрибут customModuleProvider в обеих скобках ViewController и View.

Ответ 20

Мое решение (Xcode 8.1 Swift 3.0):

Неизвестный класс xxx в файле Interface Builder.

Откройте StoryBoard в качестве исходного кода и найдите xxx. Удалить атрибут, который содержит значение xxx. Построить и запустить.

Ответ 21

В моем случае я добавил флаг -ObjC в Other Linker Flags в настройках проекта, чтобы он работал. Также я попробовал флаг -all_load, и он тоже хорошо работал.

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

Ответ 22

В моем случае класс, на который ссылается в Storyboard/xib, не было установлено Target Membership.

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

No target membership set.

Ответ 23

Я столкнулся с проблемой, когда портировал раскадровку из проекта Swift в проект Objective-c, заметив vvkuznetsov answer, оказалось, что два проекта используют один и тот же идентификатор. я "Продукт → Очистить" и нажмите клавишу "Enter" в поле "Текст модуля" и "Класс". проблема исчезла.

Ответ 24

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

Ответ 25

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

Используя XCode 4, в Навигаторе проектов выберите файл .m, содержащий класс, на который он жалуется

Перейдите в View- > Utilities- > Show File Inspector (это покажет File Inspector справа, с этой информацией .m-file)

Откройте раздел Целевое членство и убедитесь, что ваша цель выбрана для этого .m файла

Когда я добавил свой файл .m в свой проект, он почему-то не добавил его к моей целевой по умолчанию, и это заставило меня получить указанную вами ошибку.

Ответ 26

То, что только работало для меня, фактически добавляет имя модуля в файл xib...

Sooo, xib файлы выглядят следующим образом:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

УЖАСНОЕ решение, на мой взгляд, но это якобы то, как Apple хочет, чтобы мы это делали сейчас.

Этот вопрос показывает 3 возможных решения проблемы в бета-версии 4... очевидно, что Apple не очень помогла в этой ситуации в соответствии с некоторыми из-за того, что они называют ее "Working как предполагалось."

Ответ 27

У меня была такая же проблема с Xcode Version 6.1 (6A1052d). Я думаю, проблема возникает, если вы переименовали свой проект App/Xcode.

Мое решение состояло в том, чтобы вручную добавить имя модуля в конструктор интерфейса.

Ответ 28

У меня возникла эта проблема после того, как я добавил новую цель, а затем создал новый класс, используя диалог "Новый файл", но случайно не смог проверить новую цель, а также исходную цель в диалоговом окне создания, поэтому объект был только добавлен к моей исходной цели. Решение заключалось в том, чтобы удалить исходные файлы (только удалить ссылку), а затем добавить их обратно, используя "Добавить файлы", на этот раз проверяя обе цели.

Ответ 29

Решение для меня было другим. Вы должны добавить .m класса к фазе сборки, скомпилированным источниками цели.

Надеюсь, это поможет!

Ответ 30

Выберите файл неизвестного класса, откройте вкладку инспектора файлов, проверьте свое целевое имя в Target Membership. Там вы идете.