Этот класс не является ключевым значением, совместимым с кодировкой для ключа authView

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

ПРИМЕЧАНИЕ: я не нашел никакого класса authView в своем коде

2011-02-24 12:04:14.472 TestP[473:307] *** Terminating app due to uncaught exception     'NSUnknownKeyException', reason: '[<TestP 0x19d2b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key authView.'
*** Call stack at first throw:
(
0   CoreFoundation                      0x33ac0987 __exceptionPreprocess + 114
1   libobjc.A.dylib                     0x3347b49d objc_exception_throw + 24
2   CoreFoundation                      0x33ac0705 -[NSException dealloc] + 0
3   Foundation                          0x3367db4f -[NSObject(NSKeyValueCoding)    setValue:forUndefinedKey:] + 182
4   Foundation                          0x3367d03b _NSSetUsingKeyValueSetter + 90
5   Foundation                          0x3367eda3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 194
6   Foundation                          0x33630b17 -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 130
7   UIKit                               0x3224c60f -[UIRuntimeOutletConnection connect] + 66
8   CoreFoundation                      0x33a63fc7 -[NSObject(NSObject) performSelector:] + 18
9   CoreFoundation                      0x33a6cd51 -[NSArray makeObjectsPerformSelector:] + 388
10  UIKit                               0x3224b577 -[UINib instantiateWithOwner:options:] + 586
11  UIKit                               0x3224cb39 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92
12  UIKit                               0x3209e871 -[UIApplication _loadMainNibFile] + 96
13  UIKit                               0x3209a1fd -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 180
14  UIKit                               0x3206648b -[UIApplication handleEvent:withNewEvent:] + 1114
15  UIKit                               0x32065ec9 -[UIApplication sendEvent:] + 44
16  UIKit                               0x32065907 _UIApplicationHandleEvent + 5090
17  GraphicsServices                    0x33b0ef03 PurpleEventCallback + 666
18  CoreFoundation                      0x33a556ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
19  CoreFoundation                      0x33a556c3 __CFRunLoopDoSource1 + 166
20  CoreFoundation                      0x33a47f7d __CFRunLoopRun + 520
21  CoreFoundation                      0x33a47c87 CFRunLoopRunSpecific + 230
22  CoreFoundation                      0x33a47b8f CFRunLoopRunInMode + 58
23  UIKit                               0x32099309 -[UIApplication _run] + 380
24  UIKit                               0x32096e93 UIApplicationMain + 670
25  TestP                               0x00002213 main + 98
26  TestP                               0x000021ac start + 40
)
terminate called after throwing an instance of 'NSException'

Ответ 1

что-то пошло не так, когда в xcode 4 с некоторой ссылкой, потому что я объявил IBOutlet, что ссылка authView затем запустилась, и она сработала!, затем я удалил объявление IBOutlet и хорошо работал

Ответ 2

Вероятно, у вас есть файлы File Owner, запутанные в ваших xib. Это исключение бросается во время разборки nib (о чем свидетельствует +[UINib...] в backtrace). Он пытается подключить ваш IBOutlets, который вы определили.

Один из ваших просмотров настроен как authView владельца файла. Однако, когда время для разблокирования nib, владелец не имеет свойства authView, поэтому распаковка не выполняется.

Ответ 3

@Dave DeLong указал правильно.

Обход

  • Найти, когда выбрано исключение, которое загружается viewController.
  • Затем проверьте файл nib viewController, должен быть IBOutlet, прикрепленный в xib, но может быть пропущен в файле viewController.h или может быть некоторый элемент управления, который был присоединен, отсутствует в файле xib.

Зачем работать в Simulator? Иногда это заканчивается испорчением.

Просто выполните шаги

  • Сборка → Очистка
  • Сборка → Очистить все цели

Теперь он запускает реальный код, может также возникнуть проблема на устройстве, а может быть, он запускает исключение на симуляторе и в случае, если есть проблема. (Я уже упомянул обходной путь)

Ответ 4

Вот как я решил эту проблему. Я вошел в свой файл "Story Board" и выбрал представление, которое вызывало проблемы. Затем я нажал на вкладку Connections Inspector, и вы увидите соединения с восклицательными знаками справа, а не сплошные круги. Удалите их и при необходимости внесите корректировки. Сохранить > Запустить приложение и работать. Надеюсь, это поможет:)

Ответ 5

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

Например, скажем, у вас есть один UITextField на раскадровке и для него есть соответствующее свойство:

@property (retain, nonatomic) IBOutlet UItextField *myTextField;

Вы подключаете элемент пользовательского интерфейса в раскадровке к этому свойству, а затем решаете переименовать какую-то переменную. Теперь, если вы нажмете правой кнопкой мыши на свой UITextField в раскадровке, вы заметите, что существует два реферирующих выхода - старый и новый. Вы можете удалить старый, щелкнув знак "x" в Инспекторе подключений или отредактировав XML-вариант файла раскадровки.

Ответ 6

Я только что очистил проект и удалил приложение с устройства, и он снова работал. Ошибка ссылалась на представление, которое я уже удалил.

Ответ 7

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

Ответ 8

В моем случае это было еще более жутким. У меня был XIB, связанный с VC, который я полностью удалил, поскольку пошел только для кода. Идите на Simulator красиво, но систематически выходите на устройство.

Итак, я очищаю, перестраиваю, закрываю XCode, отправляюсь на перекус и кричу на mac. Ничего, компилятор продолжал указывать на несуществующую кнопку на несуществующем XIB.

Пробовал, изменив имя класса и сработает!

Ответ 9

Кажется, что ваш Interface Builder работал неправильно. Как и прежде, попробуйте очистить и перестроить. Если он не работает, я предлагаю вам заново создать свой xib-интерфейс. Это сработало для меня в аналогичном случае.

Ответ 10

Вы, вероятно, создали IBOutlet, затем удалили его, а затем связали новый, но в xib 'Inspector' вы забыли удалить ссылку и теперь имеете дубликат IBOutlet ref, который компилятор не может найти.