Ответ 1
что-то пошло не так, когда в xcode 4 с некоторой ссылкой, потому что я объявил IBOutlet, что ссылка authView затем запустилась, и она сработала!, затем я удалил объявление IBOutlet и хорошо работал
Когда я запускаю свое приложение на симуляторе, он работает хорошо, когда я пытаюсь с устройством не работать, и я получаю следующие ошибки:
ПРИМЕЧАНИЕ: я не нашел никакого класса 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'
что-то пошло не так, когда в xcode 4 с некоторой ссылкой, потому что я объявил IBOutlet, что ссылка authView затем запустилась, и она сработала!, затем я удалил объявление IBOutlet и хорошо работал
Вероятно, у вас есть файлы File Owner, запутанные в ваших xib. Это исключение бросается во время разборки nib (о чем свидетельствует +[UINib...]
в backtrace). Он пытается подключить ваш IBOutlets
, который вы определили.
Один из ваших просмотров настроен как authView
владельца файла. Однако, когда время для разблокирования nib, владелец не имеет свойства authView
, поэтому распаковка не выполняется.
@Dave DeLong указал правильно.
Обход
IBOutlet
, прикрепленный в xib, но может быть пропущен в файле viewController.h или может быть некоторый элемент управления, который был присоединен, отсутствует в файле xib.Зачем работать в Simulator? Иногда это заканчивается испорчением.
Просто выполните шаги
Теперь он запускает реальный код, может также возникнуть проблема на устройстве, а может быть, он запускает исключение на симуляторе и в случае, если есть проблема. (Я уже упомянул обходной путь)
Вот как я решил эту проблему. Я вошел в свой файл "Story Board" и выбрал представление, которое вызывало проблемы. Затем я нажал на вкладку Connections Inspector
, и вы увидите соединения с восклицательными знаками справа, а не сплошные круги. Удалите их и при необходимости внесите корректировки. Сохранить > Запустить приложение и работать. Надеюсь, это поможет:)
Я думаю, что одной из возможных причин для поднятия этого исключения является изменение имени какой-либо переменной IBOutlet после того, как соединения с раскадрой уже сделаны. Таким образом, элемент пользовательского интерфейса в раскадровке все еще ссылается на имя старой переменной. Я решил это для меня, проверив XML-представление раскадровки (щелкните правой кнопкой мыши на вашем файле .storyboard и откройте его как исходный код) и удалите старое (ненужное) имя переменной IBOutlet.
Например, скажем, у вас есть один UITextField на раскадровке и для него есть соответствующее свойство:
@property (retain, nonatomic) IBOutlet UItextField *myTextField;
Вы подключаете элемент пользовательского интерфейса в раскадровке к этому свойству, а затем решаете переименовать какую-то переменную. Теперь, если вы нажмете правой кнопкой мыши на свой UITextField в раскадровке, вы заметите, что существует два реферирующих выхода - старый и новый. Вы можете удалить старый, щелкнув знак "x" в Инспекторе подключений или отредактировав XML-вариант файла раскадровки.
Я только что очистил проект и удалил приложение с устройства, и он снова работал. Ошибка ссылалась на представление, которое я уже удалил.
Я обнаружил, что эти ошибки возникают, главным образом, при подключении свойств, их изменении и их повторном подключении. проанализируйте свой инспектор соединений для неожиданных значений, которые остаются от вашего ранее созданного и разрушенного соединения.
В моем случае это было еще более жутким. У меня был XIB, связанный с VC, который я полностью удалил, поскольку пошел только для кода. Идите на Simulator красиво, но систематически выходите на устройство.
Итак, я очищаю, перестраиваю, закрываю XCode, отправляюсь на перекус и кричу на mac. Ничего, компилятор продолжал указывать на несуществующую кнопку на несуществующем XIB.
Пробовал, изменив имя класса и сработает!
Кажется, что ваш Interface Builder работал неправильно. Как и прежде, попробуйте очистить и перестроить. Если он не работает, я предлагаю вам заново создать свой xib-интерфейс. Это сработало для меня в аналогичном случае.
Вы, вероятно, создали IBOutlet, затем удалили его, а затем связали новый, но в xib 'Inspector' вы забыли удалить ссылку и теперь имеете дубликат IBOutlet ref, который компилятор не может найти.