Я обновился до Xcode 6 beta 4, и теперь мое приложение постоянно вылетает с сообщением
Неизвестный класс X в файле Interface Builder.
Это происходит сбой, потому что предположительно Xcode не может найти мои пользовательские классы, которые я связал в своей раскадровке, но это показывает, что они правильно связаны в интерфейсе Xcode.
Я уверен, что все правильно связано. Мой единственный вариант - удалить весь файл раскадровки и начать с нуля, потому что он может быть как-то поврежден.
Изменить: Я также хотел бы добавить, что я пытался очистить, сбросить симулятор, возиться с фазами сборки и т. Д. Ничего из этого не работает.
ios
xcode
xcode6
interface-builder
uistoryboard
Эпический Байт
источник
источник
Ответы:
Я решил эту проблему, когда набирал вопрос. Я решил ответить на свой вопрос и оставить его здесь для всех, кто может столкнуться с этой проблемой при использовании Xcode 6 beta 4.
Чтобы решить эту проблему, вам нужно выбрать каждый из ваших пользовательских объектов класса в раскадровке (это включает в себя любые пользовательские представления, даже сами контроллеры пользовательских представлений).
Затем, выбрав эти объекты, откройте инспектор идентификации и в разделе «Пользовательский класс» вы увидите опцию «Модуль». Щелкните внутри текстового поля модуля и нажмите ввод.
Это оно! Текущий модуль для всех моих пользовательских объектов должен быть как-то неправильно настроен внутри в Xcode 6 beta 4. Но в инспекторе не было визуальной индикации этого.
Обратите внимание, что если нажатие клавиши ввода внутри текстового поля модуля не работает, попробуйте выбрать стрелку справа и вручную выбрать текущий модуль, затем очистите текстовое поле и нажмите клавишу ввода. Вы также можете попробовать нажать Enter внутри текстового поля класса (хотя обычно это решает другую проблему).
Вот изображение, чтобы прояснить ситуацию:
источник
@objc(...)
в один из моих классов Swift.Иногда Xcode пропускал
customModule="AppName" customModuleProvider="target"
Чтобы исправить это, откройте раскадровку как исходный код и замените эту строку:
к этому:
источник
customModuleProvider
, затем ошибка ушла.customModuleProvider
сделало это для меня, спасибо!У меня была эта проблема после переименования быстрого класса. Решил это с помощью директивы @objc:
источник
@objc class X
и изменения в@objc(X) class X
работал.@objc()
директива не была нужна для «оригинального» класса ViewController ...Проект с несколькими целями
В моем случае я работаю над проектом с несколькими целями, и проблема с «наследованием от цели» не была проверена. Выбор «наследовать от цели» решил мою проблему
источник
Это сработало для меня ..
Проверьте ваш скомпилированный исходный код, добавлен ли этот файл (например, ViewController.m) или нет, в моем случае файл ViewController не был добавлен, поэтому он выдавал ошибку.
источник
Compile Sources
. Это действительно правильное (и единственное) решение для некоторых.Это может произойти в любом Xcode выше 6.0. Это случилось со мной после переименования некоторых классов ViewController в проекте Swift (но я думаю, что это произойдет и с Obj-C). Вам просто нужно открыть конструктор интерфейса, перейти к Identity Inspector в ViewController, который переименовал свой класс, выбрать class и нажать Enter. Это переназначит переименованный класс выбранному ViewController, а также сбросит значение модуля, которое теряется после переименования класса.
Обновление для Xcode 8.1 (возможно, тоже 8.0):
Xcode 8.1 просто вылетает. Просто и досадно просто вылетает и ничего не печатает. Я преследовал это фантомное крушение в течение часа, чтобы узнать, что это был тот же самый класс - неназначенный класс в IB. Если вы получаете некоторые фантомные сбои, сначала проверьте IB на наличие неназначенных классов.
источник
Иногда предоставляемый вами контроллер теряет свое целевое членство из текущего приложения. В этом случае нажатие клавиши ввода в поле «Модуль» ничего не изменит. Перейдите к контроллеру и убедитесь, что для его целевого членства установлено текущее приложение.
источник
Включение
Inherit Module From Target
прошло правильно, целевой модуль. Это решило проблему.источник
Мой ответ: установите собственный модуль равным имени пользовательского модуля (в моем примере - имя пользовательского класса), как на скриншоте
Это решение для конкретного случая : для классов пользовательских представлений из фреймворка Pod (или Carthage ).
Инфраструктура: XCode8, Swift3
источник
Я исправил это, сделав прямо противоположное тому, что предложил ChikabuZ (хотя спасибо, что указал на это). В файле раскадровки найдите это:
и замените его следующим:
Я не могу поверить, сколько часов я теряю, обходя ошибки в компиляторе 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 фактически ломается.
источник
Эти шаги работают для меня.
1) Очистить производные данные.
2) Удалите файлы .h и .m
3) Снова создайте файлы .h и .m
источник
Я решил эту проблему, открыв файл раскадровки в качестве исходного кода и используя команду F для поиска неизвестного класса и удаления связанного с ним пользовательского класса.
источник
То, что @gfrs сказал правильно, вам нужно установить модуль. Однако однажды я столкнулся с проблемой, что мой класс не был указан в
Class
раскрывающемся списке . В конце концов я удалил файл swift, перезапустил Xcode и заново создал файл. Наконец, класс был указан и может быть использован в раскадровке.Также взгляните на этот ответ , который выглядит как решение «реальной» проблемы, с которой я столкнулся.
источник
Я решил эту проблему, введя имя модуля (к сожалению, в раскрывающемся списке ничего не отображается ...) в пользовательском классе инспектора идентификации для всех контроллеров и представлений View.
Вам также может понадобиться указать целевого поставщика. Для достижения этой цели вы можете открыть раскадровку в режиме исходного кода и добавить атрибут «customModuleProvider» в обоих угловых скобках ViewController и View.
источник
Мое решение (Xcode 8.1 Swift 3.0):
Неизвестный класс xxx в файле Interface Builder.
Откройте StoryBoard в качестве исходного кода и найдите xxx . Удалить атрибут, который содержит значение ххх . Построй и беги.
источник
customModule="" customModuleProvider=""
В моем случае, я добавил флаг ,
-ObjC
чтобыOther Linker Flags
в настройках проекта , чтобы сделать его работу. Также я попробовал с-all_load
флагом, и он тоже работал хорошо.источник
В моем случае классу , указанному в Storyboard / xib, не было задано целевое членство .
Чтобы исправить, дайте этому классу
.h
и.m
файлам такое же целевое членство, как и другим вашим классам.источник
Моим решением было удалить @objc из определения класса Custom.
источник
Я столкнулся с проблемой, когда портировал раскадровку из проекта Swift в проект Objective-c, заметив ответ vvkuznetsov , оказалось, что два проекта используют один и тот же идентификатор. Я «Продукт -> Очистить» и нажмите клавишу ввода в текстовом поле «Модуль и класс». проблема ушла
источник
Я исправил это в соответствии с тем, что предложила Лора, но мне не нужно было воссоздавать файлы.
Используя XCode 4, в Project Navigator выберите файл .m, который содержит класс, на который он жалуется
Перейдите в View-> Utilities-> Show File Inspector (это покажет File Inspector справа, с этой информацией .m-файла)
Откройте раздел Target Membership и убедитесь, что ваша цель выбрана для этого .m-файла
Когда я добавил свой файл .m в свой проект, по какой-то причине он не был добавлен в целевой объект по умолчанию, и в результате я получил указанную вами ошибку.
источник
Моя проблема была ошибка пользователя. У меня был общий UIView в моей раскадровке и в разделе «Пользовательский класс» инспектора идентификации, я случайно изменил имя с UIView на бред.
Все, что нужно для исправления, это изменить его обратно на UIView.
источник
Что только сработало для меня, так это добавление имени модуля в файл xib ...
Ооо, XIB-файлы выглядят так:
УЖАСНОЕ решение, на мой взгляд, но именно так Apple и хочет, чтобы мы сделали это сейчас.
Этот вопрос показывает 3 возможных обходных пути назад в бета-версии 4 : очевидно, Apple не очень помогла в этой ситуации, по мнению некоторых, потому что они называют это «Работать как задумано».
источник
У меня была такая же проблема с версией Xcode 6.1 (6A1052d). Я думаю, что проблема возникает, если вы переименовали свой проект App / Xcode.
Моим решением было добавить имя модуля в конструктор интерфейса вручную.
источник
У меня возникла эта проблема после того, как я добавил новую цель, а затем создал новый класс с помощью диалога «Новый файл», но случайно не смог проверить новую цель, а также исходную цель в диалоге создания, поэтому объект был добавлен только в мою оригинальная цель. Решением было удалить исходные файлы (удалить только ссылку), а затем добавить их обратно, используя «Добавить файлы», на этот раз проверяя обе цели.
источник