Ответ 1
Исправлено - отправился в iOS Simulator > Reset Содержимое и настройка
Я использую учебник для написания довольно простого приложения. Сегодня я скопировал приложение на свой рабочий компьютер. Прошлой ночью он отлично работал на моем ноутбуке, но сегодня я получаю эту ошибку. Я попытался испортить почти весь код и даже удалил все в функции didFinishLaunchingWithOptions, но я все еще получаю эту ошибку. У меня даже нет navBar нигде! Я предполагаю, что проблема с проектом или файлом вне кода является проблемой?
2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.'
*** Call stack at first throw:
(
0 CoreFoundation 0x00fa45a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x010f8313 objc_exception_throw + 44
2 CoreFoundation 0x00fa44e1 -[NSException raise] + 17
3 Foundation 0x0079f677 _NSSetUsingKeyValueSetter + 135
4 Foundation 0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
5 UIKit 0x0021b30c -[UIRuntimeOutletConnection connect] + 112
6 CoreFoundation 0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239
7 UIKit 0x00219d23 -[UINib instantiateWithOwner:options:] + 1041
8 UIKit 0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
9 UIKit 0x0002117a -[UIApplication _loadMainNibFile] + 172
10 UIKit 0x00021cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291
11 UIKit 0x0002c617 -[UIApplication handleEvent:withNewEvent:] + 1533
12 UIKit 0x00024abf -[UIApplication sendEvent:] + 71
13 UIKit 0x00029f2e _UIApplicationHandleEvent + 7576
14 GraphicsServices 0x011dd992 PurpleEventCallback + 1550
15 CoreFoundation 0x00f85944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
16 CoreFoundation 0x00ee5cf7 __CFRunLoopDoSource1 + 215
17 CoreFoundation 0x00ee2f83 __CFRunLoopRun + 979
18 CoreFoundation 0x00ee2840 CFRunLoopRunSpecific + 208
19 CoreFoundation 0x00ee2761 CFRunLoopRunInMode + 97
20 UIKit 0x000217d2 -[UIApplication _run] + 623
21 UIKit 0x0002dc93 UIApplicationMain + 1160
22 LetsEat 0x00001c99 main + 121
23 LetsEat 0x00001c15 start + 53
)
terminate called throwing an exceptionCurrent language: auto; currently objective-c
(gdb)
EDIT: Это верхняя часть моего файла delegate.m. Как вы можете видеть все это:
#import "LetsEatAppDelegate.h"
//#import "ItemsViewController.h"
@implementation LetsEatAppDelegate
@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
Я удалил все остальные файлы в проекте и все еще получаю эту ошибку.
РЕДАКТИРОВАТЬ 2
Как сейчас, я получаю эту ошибку только на своей рабочей машине. Точно такие же файлы отлично работают на моем домашнем ноутбуке. Такая же версия XCode (4.2.1)
Исправлено - отправился в iOS Simulator > Reset Содержимое и настройка
Сбросить содержимое и настройки не работает.
Вот что потрачено впустую 2 часа моего позднего ночного времени:
Я подключил розетку UIControl в конструкторе интерфейсов к IBOutlet в владельце xib. По какой-то причине IBOutlet был удален из владельца, но ссылка на аутлет осталась в xib. Это всегда даст мне ошибку
"Terminating app due to uncaught exception 'NSUnknownKeyException'"
Извлеченный урок: при удалении любых выходов для переменных в реализации убедитесь, что отсоединили соответствующее соединение в IB.
Обновление: (26 января 2015 г.)
Есть веская причина, почему Interface Builder или перья ведут себя таким образом, и я понял, почему, сегодня.
Если у вас есть IBOutlet в TheBaseClass, и у вас есть перо или сцена в раскадровке для TheSubClass, есть два способа (хака), доступных для подключения этой розетки:
В Identity Inspector назовите идентификатор "Пользовательский класс" для TheBaseClass, подключите розетку, затем установите имя класса в разделе "Пользовательский класс" для TheSubclass.
Добавьте IBOutlet в свой код TheSubclass, подключите его к элементу пользовательского интерфейса в nib, добавьте код IBOutlet в TheBaseClass, удалите этот код в TheSubClass.
Когда я наткнулся на этот ответ, он просто встал на свои места относительно того, почему Apple оставила эту висящую справочную проблему без изменений. Потому что это не ошибка. Это особенность.
У меня была эта проблема и я обнаружил, что установил "Основной интерфейс", и это вызвало проблему.
Чтобы изменить этот параметр, нажмите на свой проект (в браузере левой руки). Центральная область должна теперь отображать "Сводку" настроек для вашего проекта. Это та же область, где вы бы изменили целевую программу iOS или Ориентированные поддерживаемые устройства. В разделе "Информация о развертывании iPhone/iPod" снимите "Основной интерфейс", оставив его пустым. Это исправило проблему для меня.
Удачи.
Проблема в файле nib. Существует старое подключение от LetsEatAppDelegate
к navBar.
Я не уверен, как настроено ваше приложение, может быть объект LetsEatAppDelegate
в одном из ваших файлов nib, или может быть владелец файла с классом, установленным в LetsEatAppDelegate
4 Foundation 0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
5 UIKit 0x0021b30c -[UIRuntimeOutletConnection connect] + 112
6 CoreFoundation 0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239
7 UIKit 0x00219d23 -[UINib instantiateWithOwner:options:] + 1041
8 UIKit 0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.'
*** Call stack at first throw:
О человек. У меня была такая же проблема после удаления @properties и/или IBActions, и это сводило меня с ума! Уорк был прав на деньги. Перейдите к контроллеру проблем, нажмите на оранжевый шар и отмените выбор любых болтающихся ссылок, которые вы найдете. Вам может потребоваться прокрутить вниз, чтобы найти их все. Это решило мою проблему. Бесконечно благодарен.
Очистка "Main Interface" также решила проблему для меня. Возможно, вам придется выполнить "Очистить" после очистки "Основной интерфейс" и до его сборки.
Я тоже встречаюсь с этой проблемой,
1.In AppDelegate метод
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
rootViewController является init этими методами initWithNibName..... но на самом деле файл nib не существует, поэтому исключение throw..
2. При просмотре загрузки viewController он вызывает сбой
Возможно, потому, что я удалил xib файл, затем контроллер представления все еще инициализируется файлом nib. Поэтому я добавляю методы просмотра (- void). и теперь это нормально..ps: я reset симулятор, но он не работает.
Надеюсь на эту помощь.
В последнее время я столкнулся с такой же проблемой. Все мои выходные соединения, где прекрасно, хотя. Я, наконец, сделал это, сделав достойный ЧИСТЫЙ проект. Спасибо @Robert Wohnoutka и этот пост: Как удалить производные данные и очистить проект в Xcode 5 и Xcode 6?