Ошибка «Неизвестный класс <MyClass>в файле Interface Builder» во время выполнения - PullRequest
259 голосов
/ 13 ноября 2009

Несмотря на то, что Interface Builder знает о MyClass, я получаю сообщение об ошибке при запуске приложения.

Это происходит, когда MyClass является частью библиотеки, и не происходит, если я компилирую класс непосредственно в целевом приложении.

Ответы [ 46 ]

9 голосов
/ 15 ноября 2012

Я просто хочу добавить этот ответ, так как большинство, если не все ответы здесь предполагают, что класс действительно существует ... просто компоновщик / компилятор слишком туп, чтобы его увидеть ... таким образом, ответы вращаются вокруг либо оповещения компоновщика к существованию класса или созданию взлома, чтобы «заставить» его существовать ..

моя проблема возникает, когда это сообщение на самом деле говорит о несуществующем классе ... поэтому в качестве примера я могу вернуться к старой git ревизии, которая не знает определенного класса ... пока компилятор жалуется, что указанный класс не существует ..

решение

  • Nuke все это! сначала удалите все файлы сборки и т. д., удалив all содержимое этого каталога ~ / Library / Developer / Xcode / DerivedData
  • удалить приложение из самого телефона (и очистить содержимое симулятора, если вы используете симулятор)

тебе следует хорошо идти после этого

9 голосов
/ 04 сентября 2013

Лучший способ устранить ошибку: 1) Выберите файл класса (.m) 2) В разделе " Целевое членство ", "check" Запись названия проекта

8 голосов
/ 21 ноября 2010

Я исправил это, скопировав текст из моих class.h и .m, удалив эти файлы классов из проекта, и создав новые файлы class.h и .m с тем же именем, используя «Добавить файл». Затем я вставил код обратно в новые файлы, и все отлично заработало. Каким-то образом файлы не были связаны правильно, когда они были созданы. После этого мне не нужно было использовать какие-либо флаги компоновщика.

7 голосов
/ 06 октября 2012

Я наконец-то исправил это, я забыл добавить следующий код в мой файл .m:

@implementation MyTableViewCell

@end

Так что это было вызвано тем, что я сделал заполнитель @interface для своей ячейки таблицы, которая имела соединение с элементом в файле .xib, но есть ошибка в Интерфейсном Разработчике, где, если @implementation не указан для класс, он не может его найти.

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

P.S. по моему опыту, не имеет значения, если имена файлов .h / .m отличаются от имен @interface. У меня есть несколько файлов, содержащих более одного @interface, и они отлично работают.

P.P.S. У меня есть более подробное объяснение того, почему UITableViewCell и UICollectionViewCell вызывают эту ошибку в https://stackoverflow.com/a/22797318/539149 вместе с тем, как выявлять ее во время компиляции, используя registerClass: forCellWithReuseIdentifier:.

6 голосов
/ 14 августа 2012

просто добавьте приведенный ниже код при запуске метода appdelegate applicationatoindidfinishlanching, тогда он будет работать нормально

[myclass class];

6 голосов
/ 19 июля 2011

Это происходит потому, что .xib имеет устаревшую ссылку на старый делегат приложения, который больше не существует. Я исправил это так:

  • Щелкните правой кнопкой мыши на .xib и выберите Открыть как> Исходный код
  • В этом файле найдите старого делегата приложения и замените его новым
5 голосов
/ 01 апреля 2015

В моем случае у меня есть XCode6, указанный файл класса .m заканчивается в неправильном месте на этапе сборки - он должен был находиться под Compile Sources , но заканчиваться на Copy Bundle Resources

5 голосов
/ 31 мая 2011

Я пробовал этот и другие ответы, перечисленные на этом сайте, но ни один из них не отсортировал их для меня. Это комментарии (от http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html) помогли:

После поиска, поиска и поиска я наконец-то обнаружил имя этого удаленного класса, скрытое в файле. Мне пришлось открыть файлы конструктора интерфейса в X-коде, щелкнув по ним правой кнопкой мыши и выбрав «просмотреть как исходный код». Затем в поисках его придумали

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

Простое удаление этой последней строки, к сожалению, не исправляет, жалуясь на то, что в файле указано неправильное количество элементов. Вам необходимо удалить соответствующую строку в разделе строк над ней, который ссылается на CustomClass.

4 голосов
/ 07 октября 2016

Эта проблема, похоже, не устарела.

У меня была та же проблема с Xcode 8, и я решил ее, как smilebot :

  1. Откройте файл раскадровки как «Исходный код» в Xcode:

    image

  2. Поиск упомянутого класса и удаление всего бита, который говорит

customClass = "UnrecognizedClassName"

  1. Снова откройте файл раскадровки как «interfacebuilder - storyboard» и перестройте приложение.
3 голосов
/ 12 июня 2012

У меня было «Неизвестный класс favouritesButton в файле Interface Builder», и я нашел его в сцене сборника рассказов, где у рассматриваемой кнопки был фиктивный пользовательский класс «favouritesButton» в поле «Класс» в верхней части Identity Inspector. Я хотел поместить это значение в следующее поле: Идентификационная метка.

Изменение этого значения на «UIButton» решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...