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

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

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

Ответы [ 46 ]

0 голосов
/ 20 февраля 2019

В моем случае не удалось найти класс, поскольку он был классифицирован как расширение, определенное внутри фреймворка, например:

extension Buttons {
    public class MyButton: UIButton {
        // ...
    }
}

Когда я извлек класс из расширения, раскадровка могла наконец найти класс (MyFrameworkButton):

extension Buttons {
    public typealias MyButton = MyFrameworkButton
}

public class MyFrameworkButton: UIButton {
    // ...
}
0 голосов
/ 26 августа 2011

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

0 голосов
/ 11 февраля 2018

Попробовав большинство предложений здесь без успеха, я просто переименовал свой класс, а затем переименовал его вручную в xib-файле (с открытым как исходный код). Затем проблема ушла.

0 голосов
/ 17 мая 2015

В моем случае проблемой была неработающая ссылка IBOutlet. Как только это было исправлено, все снова стало хорошо.

0 голосов
/ 28 января 2013

Из конструктора интерфейса / раскадровки указывается класс, который недоступен.

Если класс известен, он не связан.

Если это не класс или просто некоторые символы, это, вероятно, опечатка. В этом случае проверьте все поля в контроллере представления для этого «неизвестного класса». В «Identity Inspector» (3-е слева в блоке «Custom Class» есть одно поле «Класс», который, вероятно, содержит неправильное значение. Обычно это перечисляет тип поля (UIView / UILabel и т. Д.).

0 голосов
/ 17 июля 2013

Эта проблема возникла у меня, когда я добавил вид выбора, а затем удалил его. В случае, если это кому-то поможет, вот как я наконец решил:

  1. Открыть схему документа в XCODE (не знаю, что такое структура документа? Я тоже не знал - Google google .. :)).

  2. Найдите сцену, в которой появляется предупреждающее сообщение, в окне структуры документа.

  3. В проблемной сцене встаньте (щелкните) на View, а затем в окне Utility (google it) выберите вкладку инспектора идентификации и верните имя пользовательского класса на UIView по умолчанию.

Это не так. :)

0 голосов
/ 12 февраля 2013

Я видел эту ошибку, когда менял имя класса, несмотря на обновление всех соответствующих .h и .m. Оказалось, я пропустил обновление значения 'customClass' в файлах .storyboard. Это решило проблему.

0 голосов
/ 23 декабря 2014

В моем случае пользовательский класс UIView находится во встроенной среде. Я изменил пользовательский заголовочный файл UIView на «project» на «public» и включил его в основной заголовочный файл.

0 голосов
/ 27 января 2015

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

class InterfaceController: WKInterfaceController {
    @IBOutlet weak var table: WKInterfaceTable!
}

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

0 голосов
/ 15 августа 2014

В моем случае я использовал раскадровку из другого проекта. После просмотра файла раскадровки xml (например, в TextWrangler) я заметил, что одно из значений атрибута xml «customModule» для контроллера было неправильным (оно все еще ссылалось на старый проект). Ручное изменение этого исправило проблему.

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