Что это значит? «NSUnknownKeyException, причина:… этот класс не соответствует значению ключа, кодирующему ключ X» - PullRequest
1109 голосов
/ 21 июня 2010

Я пытаюсь связать UILabel с IBOutlet, созданным в моем классе.

У меня сбой приложения со следующей ошибкой. Что это значит? Как я могу это исправить?

*** Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[ setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, кодирующему ключ XXX. '

Ответы [ 66 ]

3 голосов
/ 28 октября 2011

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

3 голосов
/ 26 февраля 2016

У вас могут быть выходы к элементу пользовательского интерфейса, но не свойство IBOutlet в файле .h

Для всех элементов пользовательского интерфейса в атрибутах подключения и соответствующих им свойств в заголовочном файле .h.

Может отсутствовать одна или несколько записей свойств в файле .h.

2 голосов
/ 17 апреля 2013

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

В Project Navigator,

Найдите файл Nib (xib).Щелкните правой кнопкой мыши и просмотрите источник.Я удалил следующий полный раздел

<object class="IBConnectionRecord">
    <object class="IBCocoaTouchOutletConnection" key="connection">
        <string key="label">DeleteLabel</string>
        <reference key="source" ref="372490531"/>
        <reference key="destination" ref="774585933"/>
    </object>
    <int key="connectionID">20</int>
</object>
2 голосов
/ 03 июля 2016

Вам может потребоваться удалить розетку, воссоздать ее, нарисовав форму IB в файл .H.

2 голосов
/ 23 января 2013

Проверьте, есть ли у вас случайные ссылки на розетки, выбрав поврежденный объект в интерфейсе раскадровки / xib и открыв инспектор подключений (View-> Utilities-> Show Connections Inspector). Если вы удалите нежелательные соединения, и вам следует идти.

2 голосов
/ 23 февраля 2016

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

2 голосов
/ 05 июля 2015

Это также происходит со мной, когда на метку UI или другой элемент UI ссылаются две переменные в классе контроллера представления, и я удаляю одну из переменных.

1 голос
/ 27 сентября 2015

У меня была эта проблема с классами swift после обновления до xcode7.Решил это с помощью директивы @objc:

@ objc (XXXViewController) class XXXViewController

1 голос
/ 14 апреля 2014

В моем случае

[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]

было причиной.

, заменив это на initWithNibName , решено.

1 голос
/ 02 ноября 2012

Тот же вопрос представлен.Моим решением было поставить правильное значение раскадровки в раскрывающемся списке Основной раскадровки.Я переименовал mainstoryboard.storyboard, но не сбросил информацию о развертывании.

...