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

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

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

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

Ответы [ 66 ]

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

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

1 голос
/ 27 июня 2015

Это уже случалось со мной дважды.

Решением было переделать всю раскадровку, так как я скопировал ее из другой (потому что она была почти такой же)

1 голос
/ 27 января 2019

Я решил эту проблему, выполнив 2 действия:

  1. Исправлена ​​ссылка на класс представления:

image

  1. Повторно импортированы все розетки:

image

1 голос
/ 21 июня 2016

Это может означать, что вы пытаетесь использовать дескриптор сортировки без atsign в начале.Как в:

[array valueForKeyPath:@"distinctUnionOfObjects.self"]

Что на самом деле должно быть:

[array valueForKeyPath:@"@distinctUnionOfObjects.self"]

1 голос
/ 04 апреля 2017

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

@objc(MyViewController) class MyViewController
1 голос
/ 20 июня 2016

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

1 голос
/ 19 июля 2017

Моя проблема началась после того, как я изменил имя цели.

Моим собственным пользовательским классам пользовательского интерфейса присвоено имя модуля со старым целевым именем.

Я изменил имя цели на новое, и теперь оно работает нормально.

1 голос
/ 07 февраля 2017

У меня была та же проблема, и причина была в том, что я указал модуль в Интерфейсном Разработчике (вместо того, чтобы оставить его пустым). Поэтому, когда я использовал другой модуль, чем тот, который я установил, приложение зависало: S ... надеюсь, это поможет кому-то еще, поскольку моя проблема не была связана с неисправностью или устареванием розетки! *

1 голос
/ 18 июня 2018

В моем случае имя свойства IBOutlet в ViewController.m было изменено, а в Storyboard - нет.Повторное введение IBOutlet в ViewController.m с помощью Ctrl-drag решило проблему.Я также заметил способ найти такие "сиротские" IBOutlets в XCode: (посмотрите на изображение) те, которые не "осиротели", имеют концентрические круги вместо номеров строк.

1 голос
/ 20 июня 2016

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

...