Подтвердить что ты не робот

Завершение приложения из-за неотображенного исключения "NSUnknownKeyException"

Я использую учебник для написания довольно простого приложения. Сегодня я скопировал приложение на свой рабочий компьютер. Прошлой ночью он отлично работал на моем ноутбуке, но сегодня я получаю эту ошибку. Я попытался испортить почти весь код и даже удалил все в функции 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)

4b9b3361

Ответ 1

Исправлено - отправился в iOS Simulator > Reset Содержимое и настройка

Ответ 2

Сбросить содержимое и настройки не работает.

Вот что потрачено впустую 2 часа моего позднего ночного времени:

Я подключил розетку UIControl в конструкторе интерфейсов к IBOutlet в владельце xib. По какой-то причине IBOutlet был удален из владельца, но ссылка на аутлет осталась в xib. Это всегда даст мне ошибку

"Terminating app due to uncaught exception 'NSUnknownKeyException'"

Извлеченный урок: при удалении любых выходов для переменных в реализации убедитесь, что отсоединили соответствующее соединение в IB.

Обновление: (26 января 2015 г.)

Есть веская причина, почему Interface Builder или перья ведут себя таким образом, и я понял, почему, сегодня.

Если у вас есть IBOutlet в TheBaseClass, и у вас есть перо или сцена в раскадровке для TheSubClass, есть два способа (хака), доступных для подключения этой розетки:

  1. В Identity Inspector назовите идентификатор "Пользовательский класс" для TheBaseClass, подключите розетку, затем установите имя класса в разделе "Пользовательский класс" для TheSubclass.

  2. Добавьте IBOutlet в свой код TheSubclass, подключите его к элементу пользовательского интерфейса в nib, добавьте код IBOutlet в TheBaseClass, удалите этот код в TheSubClass.

Когда я наткнулся на этот ответ, он просто встал на свои места относительно того, почему Apple оставила эту висящую справочную проблему без изменений. Потому что это не ошибка. Это особенность.

Ответ 3

У меня была эта проблема и я обнаружил, что установил "Основной интерфейс", и это вызвало проблему.

Чтобы изменить этот параметр, нажмите на свой проект (в браузере левой руки). Центральная область должна теперь отображать "Сводку" настроек для вашего проекта. Это та же область, где вы бы изменили целевую программу iOS или Ориентированные поддерживаемые устройства. В разделе "Информация о развертывании iPhone/iPod" снимите "Основной интерфейс", оставив его пустым. Это исправило проблему для меня.

Удачи.

Ответ 4

Проблема в файле 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:

Ответ 5

О человек. У меня была такая же проблема после удаления @properties и/или IBActions, и это сводило меня с ума! Уорк был прав на деньги. Перейдите к контроллеру проблем, нажмите на оранжевый шар и отмените выбор любых болтающихся ссылок, которые вы найдете. Вам может потребоваться прокрутить вниз, чтобы найти их все. Это решило мою проблему. Бесконечно благодарен.

Ответ 6

Очистка "Main Interface" также решила проблему для меня. Возможно, вам придется выполнить "Очистить" после очистки "Основной интерфейс" и до его сборки.

Ответ 7

Я тоже встречаюсь с этой проблемой,

1.In AppDelegate метод

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

rootViewController является init этими методами initWithNibName..... но на самом деле файл nib не существует, поэтому исключение throw..

2. При просмотре загрузки viewController он вызывает сбой

Возможно, потому, что я удалил xib файл, затем контроллер представления все еще инициализируется файлом nib. Поэтому я добавляю методы просмотра (- void). и теперь это нормально..ps: я reset симулятор, но он не работает.

Надеюсь на эту помощь.