Ошибка 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 внутри текстового поля класса (хотя обычно это связано с решением другой проблемы).
Вот изображение, чтобы сделать вещи более ясными:
Ответ 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 не был добавлен, поэтому он дал мне ошибку.
Ответ 5
Проект с несколькими целями
В моем случае я работаю над проектом с несколькими целевыми объектами, и проблема была "inherit from Target" была снята. Выбор "inherit from target" решил мою проблему
Ответ 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
я решил эту проблему.
Вот:
Ответ 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
файлы те же целевые членства, что и ваши другие классы.
Ответ 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
. Там вы идете.