ошибка xcode 6: неизвестный класс в файле interface builder

<p>я обновился до xcode 6 beta 4 и теперь мое приложение постоянно вылетает с сообщением</p><blockquote> <p>неизвестный класс x в файле interface builder.</p> </blockquote><p>это происходит сбой, потому что предположительно xcode не может найти мои пользовательские классы, которые я связал в своей раскадровке, но это показывает, что они правильно связаны в интерфейсе xcode.</p><p>я уверен, что все правильно связано. мой единственный вариант - удалить весь файл раскадровки и начать с нуля, потому что он может быть как-то поврежден.</p><p>правка: я также хотел бы добавить, что я пытался очистить, сбросить симулятор, возиться с фазами сборки и т.д. ничего из этого не работает.</p>

<p>я решил эту проблему, когда набирал вопрос. я решил ответить на свой вопрос и оставить его здесь для всех, кто может столкнуться с этой проблемой при использовании xcode 6 beta 4.</p><p>чтобы решить эту проблему, вам нужно выбрать каждый из ваших пользовательских объектов класса в раскадровке (это включает любые пользовательские представления, даже сами контроллеры пользовательских представлений).</p><p>затем, выбрав эти объекты, откройте инспектор идентификации и в разделе «пользовательский класс» вы увидите опцию «модуль». щелкните внутри текстового поля модуля и нажмите ввод.</p><p>это оно! текущий модуль для всех моих пользовательских объектов должен быть как-то неправильно настроен внутри в xcode 6 beta 4. но в инспекторе не было визуальной индикации этого.</p><p>обратите внимание, что если нажатие клавиши ввода внутри текстового поля модуля не работает, попробуйте выбрать стрелку справа и вручную выбрать текущий модуль, затем очистите текстовое поле и нажмите клавишу ввода. вы также можете попробовать нажать enter внутри текстового поля класса (хотя обычно это решает другую проблему).</p><p>вот изображение, чтобы прояснить ситуацию: <img src="https://i.stack.imgur.com/7u8bd.png" alt="enter image description here"></p>

<p>иногда xcode пропущен<strong><code>custommodule="appname" custommoduleprovider="target"</code></strong> </p><p>чтобы исправить это, откройте раскадровку как исходный код и замените эту строку:</p><pre><code><viewcontroller storyboardidentifier="storyboardid" id="someid" customclass="customclass" scenememberid="viewcontroller"> </code></pre><p>к этому:</p><pre><code><viewcontroller storyboardidentifier="storyboardid" id="someid" customclass="customclass" custommodule="appname" custommoduleprovider="target" scenememberid="viewcontroller"> </code></pre>

<p>у меня была эта проблема после переименования класса swift. решил это с помощью директивы @objc:</p><pre><code>@objc(forumtopiclistviewcontroller) class forumtopiclistviewcontroller </code></pre>

<p>это сработало для меня ..</p><p>проверьте скомпилированный исходный код, добавлен ли этот файл (например, viewcontroller.m) или нет, в моем случае файл viewcontroller не был добавлен, поэтому он сообщал мне об ошибке.</p><p><img src="https://i.stack.imgur.com/mqooq.png" alt="enter image description here"></p>

<p>это может произойти в любом xcode выше 6.0. это случилось со мной после переименования некоторых классов viewcontroller в проекте swift (но я думаю, что это произойдет и с obj-c). вам просто нужно открыть конструктор интерфейса, перейти к identity inspector в viewcontroller, который переименовал свой класс, выбрать class и нажать enter. это переназначит переименованный класс выбранному viewcontroller, а также сбросит значение модуля, которое теряется после переименования класса.</p><p>обновление для xcode 8.1 (возможно, тоже 8.0):</p><p>xcode 8.1 просто вылетает. просто и досадно просто вылетает и ничего не печатает. я преследовал это фантомное крушение в течение часа, чтобы узнать, что это был тот же самый класс - неназначенный класс в ib. если вы получаете некоторые фантомные сбои, сначала проверьте ib на наличие неназначенных классов.</p>

<p><strong>проект с несколькими целями</strong></p><p>в моем случае я работаю над проектом с несколькими целями, и проблема «наследуется от цели» не была проверена. выбор «наследовать от цели» решил мою проблему</p><p> <a href="https://i.stack.imgur.com/g6qui.png"> <img src="https://i.stack.imgur.com/g6qui.png" alt="enter image description here"> </a> </p>

<p>иногда предоставляемый вами контроллер теряет свое целевое членство из текущего приложения. в этом случае нажатие клавиши ввода в поле «модуль» ничего не изменит. перейдите к контроллеру и убедитесь, что для его целевого членства установлено текущее приложение.</p>

<p>мой ответ: установите настраиваемый модуль равным имени настраиваемого модуля (в моем примере - имени настраиваемого класса), как на скриншоте</p><p>это решение предназначено для <strong>конкретного случая</strong>: для пользовательских <strong>views</strong> классов из среды <strong>pod</strong> (или <strong>carthage</strong>). </p><p>инфраструктура: xcode8, swift3</p><p> <a href="https://i.stack.imgur.com/l4fij.png"> <img src="https://i.stack.imgur.com/l4fij.png" alt="enter image description here"> </a> </p>

<p>я исправил это, сделав прямо противоположное тому, что предложил chikabuz (хотя спасибо, что указал на это). в файле раскадровки найдите это:</p><pre><code><viewcontroller storyboardidentifier="storyboardid" id="someid" customclass="customclass" custommodule="appname" custommoduleprovider="target" scenememberid="viewcontroller"> </code></pre><p>и замените его следующим:</p><pre><code><viewcontroller storyboardidentifier="storyboardid" id="someid" customclass="customclass" scenememberid="viewcontroller"> </code></pre><p>я не могу поверить, сколько часов я теряю, обходя ошибки в компиляторе swift и xcode 6</p>

<p>выбрав правильный <code>module</code> для моего <code>custom class</code>, я решил эту проблему. </p><p>вот :</p><p> <a href="https://i.stack.imgur.com/h00oh.png"> <img src="https://i.stack.imgur.com/h00oh.png" alt="enter image description here"> </a> </p>

<p>я столкнулся с этой проблемой в<strong> xcode 8 </strong>, чтобы решить ее, мне пришлось изменить раскадровку в текстовом редакторе.</p><p>в общем, найдите свой элемент управления и удалите <code>custommodule</code> и <code>custommoduleprovider</code> из объекта управления.</p><p>сделал трюк для меня.</p>

<p>проверьте, имеет ли ваш класс право<strong> целевое членство </strong>.</p>

<p>у меня такая же проблема.</p><p>в моем случае xcode не добавлял мой пользовательский класс в: target> build phase> compile sources.</p><p>поэтому я рекомендую вам проверить, есть ли там ваш customclass.m.</p><p> <a href="https://i.stack.imgur.com/vorfx.png"> <img src="https://i.stack.imgur.com/vorfx.png" alt="enter image description here"> </a> </p><p>я надеюсь, это поможет вам.</p>

<p>я столкнулся с этой проблемой в xcode 6.1, когда я удалил <code>main.storyboard</code>, файл <code>launchscreen.xib</code> и классы <code>viewcontroller</code> по умолчанию из моего проекта.</p><p>я исправил это, удалив записи <code>launch screen file</code> и <code>main interface</code> из <code>info.plist</code></p>

<p>я везде гуглил за это. ни один из ответов не работал для меня, пока я не встретил 1 чувак, который попросил меня переместить папку моего проекта на рабочий стол. это просто сработало автоматически. очевидно, что если у вас есть проектная папка, расположенная глубоко во многих папках, xcode фактически ломается. </p>

<p>я решил эту проблему, открыв файл раскадровки в качестве исходного кода и используя команду f для поиска неизвестного класса и удаления связанного с ним пользовательского класса.</p>

<p>эти шаги работают для меня. </p><p>1) очистить производные данные.<br> 2) удалить файлы .h и .m <br> 3) снова создайте файлы .h и .m</p>

<p>мое решение (xcode 8.1 swift 3.0):</p><p>неизвестный класс<strong> <em>xxx</em> </strong>в файле interface builder.</p><p>откройте storyboard в качестве исходного кода и найдите<strong> <em>xxx</em> </strong>. удалить атрибут, который содержит значение<strong> <em>xxx</em> </strong>. построй и беги.</p>

<p>я решил эту проблему, введя имя модуля (к сожалению, в раскрывающемся списке ничего не отобразится ...) в пользовательском классе инспектора идентификации для всех контроллеров и представлений view.</p><p>вам также может понадобиться указать целевого поставщика. для достижения этой цели вы можете открыть раскадровку в режиме исходного кода и добавить атрибут «custommoduleprovider» в обоих угловых скобках viewcontroller и view. </p>

<p>то, что @gfrs сказал правильно, вам нужно установить модуль. однако однажды я столкнулся с проблемой, что мой класс не был указан в раскрывающемся списке <code>class</code>. в конце концов я удалил файл swift, перезапустил xcode и заново создал файл. наконец класс был указан и может быть использован в раскадровке.</p><p>также взгляните на <a href="https://stackoverflow.com/a/10157567/58107">этот ответ</a> , который выглядит для решения «реальной» проблемы, с которой я столкнулся.</p>

<p>в моем случае я добавил флаг <code>-objc</code> в <code>other linker flags</code> в настройках проекта, чтобы он работал. также я попробовал с флагом <code>-all\_load</code>, и он тоже работал хорошо.</p><p> <a href="https://i.stack.imgur.com/dpvya.png"> <img src="https://i.stack.imgur.com/dpvya.png" alt="enter image description here"> </a> </p>

<p>в моем случае<strong> класс </strong>, на который есть ссылка в раскадровке/xib, не имел<strong> target membership </strong>set.</p><p>чтобы исправить, дайте файлам <code>.h</code> и <code>.m</code> этого класса такое же целевое членство, как и другим классам.</p><p><img src="https://i.stack.imgur.com/nqlvr.png" alt="no target membership set."></p>

<p>включение <code>inherit module from target</code> приняло правильный целевой модуль. это решило проблему.</p><p> <a href="https://i.stack.imgur.com/bch1r.png"> <img src="https://i.stack.imgur.com/bch1r.png" alt="enter image description here"> </a> </p>

<p>я столкнулся с проблемой, когда портировал раскадровку из проекта swift в проект objective-c, заметив <a href="https://stackoverflow.com/a/27763697/2361752">ответ vvkuznetsov</a> , оказалось, что два проекта используют один и тот же идентификатор. я "product -> clean" и нажимаю клавишу ввода в текстовом поле module and class. проблема ушла </p>

<p>я исправил это в соответствии с тем, что предложила лора, но мне не нужно было воссоздавать файлы.</p><p>используя xcode 4, в project navigator выберите файл .m, который содержит класс, на который он жалуется</p><p>перейдите в view-> utilities-> show file inspector (это покажет file inspector справа, с этой информацией .m-файла)</p><p>откройте раздел «целевое членство» и убедитесь, что ваша цель выбрана для этого .m-файла</p><p>когда я добавил свой файл .m в свой проект, по какой-то причине он не был добавлен в целевой объект по умолчанию, и в результате я получил указанную вами ошибку.</p>

<p>моим решением было удалить @objc из определения класса custom.</p>

<p>моя проблема была ошибка пользователя. у меня был общий uiview в моей раскадровке, а в разделе custom class инспектора идентификации я случайно изменил имя с uiview на бред.</p><p>все, что нужно для исправления, это изменить его обратно на uiview.</p>

<p>решение было другим для меня. вам нужно добавить .m класса к фазе компиляции скомпилированных исходных файлов цели. </p><p>надеюсь это поможет!</p>

<p>у меня была эта проблема после того, как я добавил новую цель, а затем создал новый класс с помощью диалогового окна «новый файл», но случайно не смог проверить новую цель, а также исходную цель в диалоге создания, поэтому объект был добавлен только в мою оригинальная цель. решение состояло в том, чтобы удалить исходные файлы (удалить только ссылку), а затем добавить их обратно, используя «добавить файлы», на этот раз проверяя обе цели. </p>

<p>что только сработало для меня, так это добавление имени модуля в xib-файл ... </p><p>ооо, xib-файлы выглядят так:</p><pre><code>mymodule.myviewcontroller.xib (module being the name of the proyect, usually) </code></pre><p>ужасное решение, на мой взгляд, но именно так apple и хочет, чтобы мы сделали это сейчас. </p><p> <a href="https://stackoverflow.com/questions/25538995/cant-load-uiviewcontroller-xib-file-in-storyboard-in-swift/25539016#25539016">этот вопрос показывает 3 возможных обходных пути назад в бета-версии 4</a> ... очевидно, apple не очень помогла в этой ситуации, по мнению некоторых, потому что они называют это «работать как задумано». </p>

<p>у меня была такая же проблема с версией xcode 6.1 (6a1052d). я думаю, что проблема возникает, если вы переименовали свой проект app/xcode.</p><p>моим решением было добавить имя модуля в конструктор интерфейса вручную.</p>

<p>выберите файл неизвестного класса, откройте вкладку инспектора файлов, проверьте имя цели в <code>target membership</code>. вот и ты.</p>

<p><strong> swift 3 </strong>решение.</p><p>все это не сработало.</p><ol> <li>нажатие на <code>module</code> на правой панели не работает.</li> <li>добавление @obj не сработало.</li> <li>перезапуск не работал.</li> <li>перемещение на рабочий стол, поскольку разрывы xcode для более длинного пути не работают . </li> </ol><p>это сработало, наконец.</p><p>просто<strong> создайте новый каталог и создайте новый проект </strong>внутри него. добавьте файлы, кроме main.sotryboard.</p><p>теперь скопируйте контроллеры представления из предыдущего проекта и вставьте его в новый main.storyboard.</p><p>вуаля! это работает.</p>

<p>моя проблема была связана с фреймворком подфайлов (в частности, «bwwalkthrough»). ни одно из вышеперечисленных решений не помогло мне, и как бы я ни пытался, я не смог заставить модуль указывать на мое приложение.</p><p>в итоге мне удалось удалить библиотеку в виде подфайла и добавить ее непосредственно в мой проект в качестве статической библиотеки. после этого все было для меня безрассудно. не совсем уверен, что «сломано» в реализации класса pod.</p>

<p>я - пользователь <code>pyobjc</code>, и у меня был свой подкласс <code>nsview</code> в его собственном файле. что решило эту проблему для меня, так это переместить подкласс <code>nsview</code> из его собственного файла в мой файл <code>appcontroller.py</code>. это файл, в котором находится контроллер приложения.</p>

<p>у меня была та же проблема, но не то же самое.</p><p>папка проекта была немного повреждена, поэтому мне пришлось скопировать папку моего проекта в другую папку, например на рабочий стол, и после этого открыть проект.</p><p>когда он откроется, перейдите в ваш проект конструктора интерфейса, и вы увидите, что он распознает ваш скрипт. затем вы действительно нажмете на имя вашего скрипта и нажмете ввод, и вы увидите, что вход модуля сам заполнится.</p><p>и это будет работать как шарм! : d</p>

<p>для меня я использую xcode7 + swift2</p><p>решил эту проблему, проверив мой код, у меня есть эта строка в моем viewcontroller:</p><pre><code> self?.navigationcontroller?.pushviewcontroller(vc, animated: true) </code></pre><p>затем я понял, что у меня нет навигационного контроллера, подключенного к странице сведений. так что, если вы запускаете новый viewcontroller с настроенным идентификатором, лучше это проверить.</p>

<p>я столкнулся с проблемой, когда создал проект с тем же именем, которое уже существовало в моем каталоге проектов (хотя он был удален некоторое время назад). я написал свое решение там <a href="https://stackoverflow.com/a/27763697/1654692">https://stackoverflow.com/a/27763697/1654692</a> </p>

<p>это сработало для меня, когда<em> ничего </em>еще сделал. из каталога проекта в терминале:</p><pre><code>[~/developer/myproject] grep -rn viewcontroller * | grep -i xib </code></pre><p>откройте соответствующие файлы как исходный код в xcode и измените все экземпляры viewcontroller на то, что вам действительно нужно. в моем случае файл, который мне нужно было открыть как источник, был main.storyboard, и я изменил экземпляры viewcontroller на detailviewcontroller.</p><p>я удалил два файла из xcode и main.storyboard, что, как я полагаю, вызвало эту проблему для меня с самого начала.</p>

<p>это случилось со мной, потому что мой класс был помечен <code>@objc</code> и в раскадровке он не смог найти модуль. удаление <code>@objc</code> решило проблему</p>

<p>у меня была та же проблема с xcode 6.3, когда я добавлял файлы в «myapp» . это потому, что я выбираю «создать ссылку на папку» вместо «создавать группы». я удаляю эти файлы и добавляю их снова с помощью «создания групп» вариант. и проблема исправлена.</p>

<p>это действительно странно, когда <code>xcode 10</code> перестал «отлаживать отладки».<br> в моем случае я установил uitableviewdelegate и uitableviewdatasource со storyboard и забыл реализовать эти необходимые методы.<br>я просто хотел сначала протестировать представление, прежде чем реализовывать эти методы, а затем завершиться сбоем! <code>xcode 9</code>, предупреждает об этих методах, но <code>xcode 10</code> действительно сделал мой код медленным, а не этим, другие я проходил через это "сомнение в ошибке".<br>надеюсь, это поможет кому-то.<br> спасибо</p>

<p>в моем случае я настроил приложение как универсальное приложение, поэтому xcode создает две раскадровки. но я использовал только (разработан) раскадровку только для iphone. и пытаясь запустить приложение в ipad.для решения проблемы просто нужно сделать приложение как только для iphone и прекрасно работает. </p>

<p>для меня проблема заключалась в том, что я ссылался на собственный класс в раскадровке (который соответствовал файлу .h), но у меня не было команды @implementation в файле .m. </p>

<p>на мне это случилось, потому что мой проект назывался "ä, ü, ö"</p>

<p>не используйте пробелы в имени проекта, иначе пользовательский класс не найдет ваши собственные классы.</p>

<p>я играл с весенним классом. и эта ошибка произошла со мной, потому что я использовал папку как ссылку при перемещении всего класса папки в проект вместо создания групп. так что это было мое решение, не используйте папку как ссылку, а создавайте группы.</p>

<p>я столкнулся с такой проблемой в xcode 6, когда я удалил уже включенные файлы viewcontroller.h & viewcontroller.m из моего нового проекта, основанного на представлении, и удалил сцену, которая была связана с этим классом, из раскадровки. xcode сохраняет эти файлы в папке производных данных. , так что если вы попытаетесь перейти в window -> projects -> your\_project и удалить производные данные, все будет хорошо.</p>

<p>в моем случае проблема была в том, что наша основная раскадровка была установлена в качестве экрана запуска, и я получал ошибку консоли (без сбоев) при запуске приложения для каждого настраиваемого контроллера представления, указанного в раскадровке.</p><p>мы покрывали xib и запускали образы на раскадровки, и я еще не дошел до того, чтобы снова запустить экран запуска. когда я наконец приступил к созданию простой раскадровки без пользовательских контроллеров представления (которые не разрешены), эти консольные ошибки перестали появляться.</p>

<p>в моем случае viewcontroller.h/m, где в lib. проекты все еще строятся, но начиная с xcode 6.3 вышеупомянутая ошибка была показана во время выполнения. перемещение обоих файлов обратно в проект решило проблему.</p>