Я обновился до Xcode 6 beta 4, и теперь мое приложение постоянно вылетает с сообщением
Неизвестный класс X в файле Interface Builder.
Он сбой, потому что предположительно Xcode не может найти мои пользовательские классы, которые я связал в своей раскадровке, но он показывает, что они правильно связаны в интерфейсе Xcode.
Я уверен, что все правильно связано. Моим единственным другим вариантом может быть удаление всего файла раскадровки и запуск с нуля, потому что он может быть поврежден каким-то образом.
Edit: Я также хотел бы добавить, что я пробовал чистить, симулятор ремиксов, возиться со стадиями сборки и т.д. Ничего из этого не работает.
Я решил эту проблему, когда я вводил вопрос. Я решил, что отвечу на свой вопрос и оставлю его для всех, кто может столкнуться с этой проблемой при использовании Xcode 6 beta 4.
Чтобы устранить эту проблему, вам нужно выбрать каждый из ваших собственных объектов класса в Storyboard (включая любые пользовательские представления, даже сами пользовательские контроллеры представлений).
Затем, выбрав эти объекты, откройте инспектор идентификации и в разделе "Пользовательский класс" вы увидите параметр "Модуль". Щелкните внутри текстового поля Module и нажмите enter.
Что это! Текущий модуль для всех моих пользовательских объектов, должно быть, был некорректно установлен некорректно в 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">
customModuleProvider
, затем ошибка исчезла.
У меня была эта проблема после переименования быстрого класса. Решил его с помощью директивы @objc:
@objc(ForumTopicListViewController) class ForumTopicListViewController
@objc class X
и смена на @objc(X) class X
работала.
Это сработало для меня..
Проверьте ваш скомпилированный источник, добавлен ли этот файл (например, ViewController.m) или нет, в моем случае файл ViewController не был добавлен, поэтому он дал мне ошибку.
Compile Sources
. Это действительно правильное (и единственное) решение для некоторых.
Это может произойти в любом 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 для непризнанных классов.
Проект с несколькими целями
В моем случае я работаю над проектом с несколькими целевыми объектами, и проблема была "inherit from Target" была снята. Выбор "inherit from target" решил мою проблему
Иногда контроллер, который вы предоставляете, теряет целевое членство из текущего приложения. В этом случае нажатие кнопки ввода в поле "Модуль" ничего не сделает. Перейдите к контроллеру и убедитесь, что он имеет целевое членство, установленное в текущем приложении.
Мой ответ: установите пользовательский модуль равным настраиваемому имени 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
Выбор подходящего Module
для моего Custom Class
я решил эту проблему.
Вот:
Я столкнулся с этой проблемой в Xcode 8, для ее устранения мне пришлось изменить раскадровку в текстовом редакторе.
В общем, найдите свой контроль и удалите customModule
и customModuleProvider
из объекта управления.
Сделал трюк для меня.
Проверьте, имеет ли ваш класс право Целевое членство.
У меня была та же проблема.
В моем случае Xcode не добавлял мой пользовательский класс в: Target > Build Phase > Compile Sources.
Поэтому я рекомендую вам проверить, есть ли ваш CustomClass.m.
Надеюсь, это поможет вам.
Я столкнулся с этой проблемой в Xcode 6.1, когда я удалил Main.storyboard
, файл LaunchScreen.xib
и классы по умолчанию ViewController
из моего проекта.
Я исправил его, удалив записи Launch Screen File
и Main Interface
из Info.plist
Я искал всюду ради этого. Ни один из ответов не работает для меня, пока я не встретил 1 парня, который попросил меня переместить мою папку проекта на рабочий стол. Он просто работал автоматически. Очевидно, если у вас есть папка проекта в глубину во многих папках, XCODE действительно ломается.
Я решил это, открыв файл раскадровки в качестве исходного кода и используя команду-F, чтобы найти мой неизвестный класс и удалить связанный с ним пользовательский класс.
Эти шаги работают для меня.
1) Очистить производные данные.
2) Удалите файлы .h и .m
3) Создайте файлы .h и .m Again
Мое решение (Xcode 8.1 Swift 3.0):
Неизвестный класс xxx в файле Interface Builder.
Откройте StoryBoard в качестве исходного кода и найдите xxx. Удалить атрибут, который содержит значение xxx. Построить и запустить.
customModule="" customModuleProvider=""
Я решил эту проблему, набрав имя модуля (к сожалению, ниспадающий список ничего не покажет...) в пользовательском классе инспектору идентификации для всех контроллеров и представлений View.
Вам также может потребоваться указать целевого поставщика. Для достижения этой цели вы можете открыть раскадровку в режиме исходного кода и добавить атрибут customModuleProvider в обеих скобках ViewController и View.
Что говорит @gfrs правильно, вам нужно установить модуль. Однако однажды я столкнулся с проблемой, что мой класс не указан в раскрывающемся списке Class
. В конце концов я удалил быстрый файл, перезапустил Xcode и заново создал файл. Наконец, класс был указан и может использоваться в раскадровке.
Также посмотрите этот ответ, который, похоже, решает "реальную" проблему, с которой я столкнулся.
В моем случае я добавил флаг -ObjC
в Other Linker Flags
в настройках проекта, чтобы он работал. Также я попробовал флаг -all_load
, и он тоже хорошо работал.
В моем случае класс, на который ссылается в Storyboard/xib, не было установлено Target Membership.
Чтобы исправить, дайте этому классу .h
и .m
файлы те же целевые членства, что и ваши другие классы.
Я исправил это в соответствии с тем, что предложила Лора, но мне не нужно было воссоздавать файлы.
Используя XCode 4, в Навигаторе проектов выберите файл .m, содержащий класс, на который он жалуется
Перейдите в View- > Utilities- > Show File Inspector (это покажет File Inspector справа, с этой информацией .m-file)
Откройте раздел Целевое членство и убедитесь, что ваша цель выбрана для этого .m файла
Когда я добавил свой файл .m в свой проект, он почему-то не добавил его к моей целевой по умолчанию, и это заставило меня получить указанную вами ошибку.
Моим решением было удалить @objc из определения пользовательского класса.
Я столкнулся с проблемой, когда портировал раскадровку из проекта Swift в проект Objective-c, заметив vvkuznetsov answer, оказалось, что два проекта используют один и тот же идентификатор. я "Продукт → Очистить" и нажмите клавишу "Enter" в поле "Текст модуля" и "Класс". проблема исчезла.
Выберите файл неизвестного класса, откройте вкладку инспектора файлов, проверьте свое целевое имя в Target Membership
. Там вы идете.
Решение для меня было другим. Вы должны добавить .m класса к фазе сборки, скомпилированным источниками цели.
Надеюсь, это поможет!
У меня возникла эта проблема после того, как я добавил новую цель, а затем создал новый класс, используя диалог "Новый файл", но случайно не смог проверить новую цель, а также исходную цель в диалоговом окне создания, поэтому объект был только добавлен к моей исходной цели. Решение заключалось в том, чтобы удалить исходные файлы (только удалить ссылку), а затем добавить их обратно, используя "Добавить файлы", на этот раз проверяя обе цели.
У меня была такая же проблема с Xcode Version 6.1 (6A1052d). Я думаю, проблема возникает, если вы переименовали свой проект App/Xcode.
Мое решение состояло в том, чтобы вручную добавить имя модуля в конструктор интерфейса.
То, что только работало для меня, фактически добавляет имя модуля в файл xib...
Sooo, xib файлы выглядят следующим образом:
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
УЖАСНОЕ решение, на мой взгляд, но это якобы то, как Apple хочет, чтобы мы это делали сейчас.
Этот вопрос показывает 3 возможных решения проблемы в бета-версии 4... очевидно, что Apple не очень помогла в этой ситуации в соответствии с некоторыми из-за того, что они называют ее "Working как предполагалось."
Это действительно странно, когда XCode 10
остановился на "уточнение debugs".
В моем случае я установил UITableViewDelegate и UITableViewDataSource со Storyboard и забыл реализовать эти необходимые методы.
Я просто хотел сначала проверить тест, прежде чем реализовать эти методы, а затем сбой! XCode 9
, будет предупреждать об этих методах, но XCode 10
, действительно сделал мой код медленным, а не на этом, другие я был через это "ошибка сомнения".
Надеюсь, это поможет кому-то.
Спасибо
Я пользователь PyObjC
и у меня NSView
подкласс NSView
в собственном файле. Для меня это NSView
подкласс NSView
из собственного файла в файл AppController.py
. Это файл, в котором есть контроллер приложения.
Моя проблема была ошибкой пользователя. У меня был общий UIView в моей раскадровке, а в разделе Custom Class из Identity Inspector я случайно сменил имя с UIView на тарабарщину.
Все, что нужно было исправить, это изменить его на UIView.
Swift 3.
Все это НЕ работало.
Module
на правой панели НЕ работало.Это сработало наконец.
Просто создайте новый каталог и создайте новый проект внутри этого. Добавьте файлы, кроме Main.sotryboard.
Теперь скопируйте контроллеры представления из предыдущего проекта и вставьте его в новую Main.storyboard.
Войла! Это работает.
Для меня проблема заключалась в том, что я ссылался на пользовательский класс в раскадровке (который соответствовал файлу .h), но у меня не было команды @implementation в файле .m.
В моем случае проблема была связана с тем, что наша основная раскадровка была установлена как экран запуска, и я получил консольную ошибку (без сбоев) при запуске приложения для каждого настраиваемого контроллера представлений, упомянутого в раскадровке.
Мы поделились с XIB и запустили образы в раскадровки, и я еще не успел снова запустить экран запуска. Когда я наконец добрался до создания раскадровки для обнаженных костей без каких-либо настраиваемых контроллеров представлений (которые не разрешены), эти ошибки консоли перестали появляться.
Моя проблема была связана с каркасом podfile (в частности, с BWWalkthrough). Ни один из вышеперечисленных решений не работал у меня, и как бы я ни старался, я не мог заставить модуль указывать на мое приложение.
Что для меня работало, так это удаление библиотеки в виде podfile и добавление ее непосредственно в мой проект как статическую библиотеку. После этого все было тяжело. Не совсем уверен, что было "сломано" с реализацией класса класса.
BWWalkthrough
заставила сообщения идти за мной.
Для меня я использую Xcode7 + Swift2
Решив эту проблему, проверив мой код, у меня есть эта строка в моем диспетчере viewController:
self?.navigationController?.pushViewController(vc, animated: true)
Тогда я понял, что у меня нет доступа к навигационному контроллеру, подключенному к странице подробностей. Поэтому, если вы нажимаете новый ViewController с настроенным идентификатором, лучше это проверить.
У меня была такая же проблема с Xcode 6.3, когда я добавлял файлы в "myapp". Это потому, что я выбираю "создать ссылку на папку" вместо "создавать группы". Я удаляю эти файлы и добавляю их снова с опцией "create groups". И проблема исправлена.
в моем случае, я настраиваю приложение как универсальное приложение, поэтому xcode создает две раскадровки. Но я использовал только (разработанную) только раскадровку iPhone. и пытается запустить приложение в iPad. Для решения проблемы просто нужно сделать приложение, как только для iPhone, и отлично работает.
Я играл с классом Spring. И эта ошибка произошла со мной, потому что я использовал папку в качестве ссылки при перемещении целого класса папки в проект вместо создания групп. Так что это было мое решение, не используйте папку в качестве ссылки, но создавайте группы.
В mij случае ViewController.h/m, где в lib. Проекты все еще строятся, но с Xcode 6.3 приведенная выше ошибка была показана во время выполнения. Перемещение обоих файлов обратно в проект решило проблему.
Это работало для меня, когда ничего больше не делалось. Из каталога проекта в терминале:
[~/Developer/MyProject] grep -rn ViewController * | grep -i xib
Откройте сопоставленные файлы в качестве исходного кода в Xcode и измените любые экземпляры ViewController на то, что вам действительно нужно. В моем случае файлом, который мне нужно было открыть в качестве источника, была Main.storyboard, и я изменил экземпляры ViewController на DetailViewController.
Я удалил два файла из Xcode и main.storyboard, что, по моему мнению, вызвало эту проблему для меня.
У меня была та же проблема, но не с тем же исправлением.
Папка проекта была искажена, поэтому мне пришлось скопировать папку проекта в другую папку, например, на ваш рабочий стол и после этого открыть проект.
Когда он откроется, перейдите в проект построителя интерфейса, и вы увидите, что он узнает ваш script. Затем вы нажимаете действительно на имя своего script и нажимаете enter, u увидит, что ввод модуля заполнит его.
И это будет работать как шарм!: D
Это случилось со мной, потому что мой класс был отмечен @objc
, а в sotryboard он не смог найти модуль. Удаление @objc
устраняет проблему
У меня возникла проблема, когда я создал проект с тем же именем, который уже существует в каталоге моих проектов (хотя он был удален некоторое время назад). Я написал свое решение там https://stackoverflow.com/questions/13730347/xcode-unknown-class-in-interface-builder-file
Не используйте пробелы в имени проекта, иначе Пользовательский класс не найдет ваши собственные классы.
Я столкнулся с такой проблемой на Xcode 6, когда я удалил уже включенные файлы ViewController.h и ViewController.m из моего нового проекта, основанного на представлении, и удалил сцену, связанную с этим классом, из раскадровки, Xcode использует эти файлы в, поэтому, если вы попытаетесь перейти в Window → Projects → your_project и удалить производные данные, все будет хорошо.