Как отследить источник исключения KVC: этот класс не совместим со значением кода для панели инструментов ключа? - PullRequest
0 голосов
/ 30 апреля 2010

Я получаю эту ошибку при попытке запустить приложение:

2010-04-29 13:49:01.355 MyApp[56123:207] *** Terminating app due to uncaught
exception 'NSUnknownKeyException', reason: '[<MyViewController 0x5112b10>
setValue:forUndefinedKey:]: this class is not key value coding-compliant for 
the key toolbar.'

MyViewController раньше имел IBOutlet, называемый «панелью инструментов», который подключался к объекту UIToolbar в кончике. Я решил, что мне больше не нужна панель инструментов или перо, и удалил их из проекта. Но Xcode, похоже, все еще хочет ссылаться на «панель инструментов».

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

EDIT : Странно, исключение не возникло, когда я запускал код на устройстве, а не на симуляторе. Кроме того, когда я использую тривиальное перо для MyViewController (в котором не было панели инструментов), исключение исчезло. Я использую git, и когда я вернулся к выполнению предыдущих коммитов моего кода еще до того, как MyViewController даже имел панель инструментов или перо, они также странно дали исключение. Этот код работал нормально. Я думаю, что это исключение связано с XCode и симулятором, а также с некоторым оставшимся состоянием, когда я удалил нежелательный кончик из проекта.

1 Ответ

1 голос
/ 30 апреля 2010

Xcode - это IDE. Это не XCode, который просит ваш контроллер представления для панели инструментов, пока ваше приложение работает.

Существует два способа устранения неполадок:

  1. Установите точку останова на objc_exception_throw, затем запустите приложение под отладчиком.
  2. Установите точку останова на -[NSObject(NSKeyValueCoding) valueForUndefinedKey:], затем запустите приложение под отладчиком.

В любом случае, отладчик сломает (прервет) ваше приложение, когда произойдет исключение. Посмотрите на трассировку стека, чтобы увидеть, что отправило сообщение valueForKey:.

...