Неизвестный класс в построителе интерфейса
Я знаю, что на эту тему много вопросов, но я попробовал большинство из них попытаться понять это без успеха.
проблема:
сначала я не мог добавить свой класс из помощника редактора, потому что пользовательский класс не взял его.
- Я убедился, что вызовы наследуются от uiviewcontroller
- Я убедился, что класс добавлен в цель
- Я попытался удалить файл класса и снова добавить его обратно
- Наконец, я добавил класс через раскадровку xml и появился в пользовательском классе
Теперь я пытаюсь подключить свои кнопки, представления и т.д. к своим выходам. Похоже, что они подключены, но при запуске приложения и открытии этого контроллера просмотра приложение выходит из строя, а отладчик печатает:
Msgstr "Неизвестный класс xxx в файле Interface Builder."
и тогда
"этот класс не является ключевым кодом, совместимым для ключа btnMenu".
Я проверил:
- Этот инспектор подключен правильно (нет ошибок в выходах)
- Пробовал удалить производные данные
- Очистить проект
- Переустановите приложение
Я даже попытался перезагрузить свой Mac и, конечно, не смог.
Может ли кто-нибудь осветить здесь свет?
спасибо.
Ответы
Ответ 1
Я только что произвел это с подклассом UIViewController (с Xcode 9 beta 2 и Swift 4), и решением было поставить галочку "Inherit from Target", где я установил пользовательский класс в IB.
Если ваше представление находится в файле .bundle
(например, для фреймворка/статической библиотеки), который копируется в другую цель, вам нужно установить явную цель модуля для каждого класса xib/storyboard, а не наследовать его от цели, которая его размещает.
Ответ 2
Для меня проблема заключалась в том, что класс не был частью целевого членства. Просто добавьте класс к цели, и вы должны увидеть его обратно в построителе интерфейса. Это помогло в моем случае.
![введите описание изображения здесь]()
Ответ 3
После того, как я проверил галочку под названием "Inherit Module From Target" в пользовательском классе в разделе View Controller, он работает нормально. Можно следить за изображением.
Чтобы найти это>
Выберите желтую кнопку контроллера представления >, затем нажмите "Показать инспектора идентификации">, а затем отметьте галочку с именем "Унаследовать модуль от цели""
![enter image description here]()
Ответ 4
То, что упомянул @Anthony Scott, верно, пока у вас не будет Framework_A, зависящей от Framework_B, а класс будет от Framework_B :) Затем вам нужно снять флажок и предоставить Module, который содержит данный класс. Спасибо за вопрос, кстати. Я использую фреймворк Commons для других фреймворков, и это помогло мне понять это;) Для тех, кто разрабатывает пользовательские фреймворки Cocoa Touch, это может быть полезно.
Ответ 5
Если вы пытаетесь назначить класс ViewController, убедитесь, что созданный вами класс наследует UIViewController. Единственная причина, по которой xCode не распознает ваш класс, - это то, где это другой тип экземпляра, допустим, может быть типом UITableViewController.
Сначала проверьте наследование вашего класса.
Ответ 6
У меня была эта проблема с пользовательским UIView, который я тестировал, где UIView был в фреймворке. Я создал простое приложение, создал UIView в StCboard ViewController по умолчанию и установил его класс в MyCustomView. Я всегда получал ошибку "Неизвестный класс в конструкторе интерфейсов" при запуске приложения. Я импортировал свой фреймворк и проверил в собранном продукте, что фреймворк был там.
Проблема заключалась в том, что код моего тестового приложения никогда не использовал эту среду. Хотя Storyboard ссылался на него, я думаю, он никогда не загружался. Когда я добавил [MyCustomView load];
в код тестового приложения, все это работало.
Ответ 7
ok, поэтому я не знаю, как и почему, но я сделал (СНОВА), что я уже пробовал, прежде чем:
- удаление класса
- создание того же класса с новым именем
- удалил сцену и воссоздал ее в раскадровке
- связал все (одинаковым образом!!!)
теперь кажется, что Xcode знает мой класс....
я все еще не знаю, в чем проблема, но я думаю, что это имеет какое-то отношение к компоновщику.
Ответ 8
Я столкнулся с этой ошибкой, потому что я случайно сохранил свой файл класса в папку Base.lproj при его создании.
Я исправил ошибку, щелкнув правой кнопкой мыши файл в Навигаторе проектов и удалив ссылку на него. Затем я переместил файл через Finder в нужную папку. Затем я щелкнул правой кнопкой мыши основную группу в Навигаторе проектов и нажал " Add Files to "GroupName"...
выбрал класс и нажал кнопку " Add
.
После этого ошибка ушла.
Ответ 9
Проверьте имя своего класса. Убедитесь, что он соответствует классу, которому вы назначили ViewController в инспекторе свойств.
Ответ 10
Вам нужно создать экземпляр контроллера представления с помощью настраиваемого класса. Без этого может возникнуть ошибка.
self.storyboard!.instantiateViewController(withIdentifier: "namePage") as! EmailAndPassword
Ответ 11
ничего из этого не помогло. Моя проблема заключалась в том, что я создал собственные раскадровки и добавил собственные классы. Но я забыл взять стрелку контроллера начального вида из автоматически сгенерированной основной раскадровки и заменил исходную раскадровку на мою собственную раскадровку, которая исправила ее для меня.
Ответ 12
Для тех, кто сталкивается с этой проблемой, но с системным классом, таким как PKCanvasView
или ARView
, в раскадровке.
После того, как вы настроили представление Custom Class
на любой из этих системных классов, убедитесь, что Module
установлено на None
. Затем перейдите к цели Link Binary with Libraries
в Build Phases
и вручную свяжите структуру, которая содержит этот класс. Последний шаг - очистить и удалить производные данные (это важно, иначе проблема не исчезнет).