Неизвестный класс в построителе интерфейса

Я знаю, что на эту тему много вопросов, но я попробовал большинство из них попытаться понять это без успеха.

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

  • Я убедился, что вызовы наследуются от 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 и вручную свяжите структуру, которая содержит этот класс. Последний шаг - очистить и удалить производные данные (это важно, иначе проблема не исчезнет).