Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Terminating app due to uncaught exception 'NSUnknownKeyException' [duplicate]

Tags:

I'm using a tutorial to write a fairly simple app. I copied the app to my work computer today. It was working perfectly on my laptop last night, but today I get this error. I tried gutting nearly all of the code, and even deleted everything in the didFinishLaunchingWithOptions function, but I still get this error. I don't even have a navBar declared anywhere! I assume there's some kind of project or file setting outside of the code that is the problem?

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: This is the top of my delegate.m file. As you can see it's all boilerplate:

#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; }  

I removed every other file in the project and still get this error.

EDIT 2

As it now stands, I only get this error on my work machine. The exact same files run perfectly on my home laptop. Same version of XCode (4.2.1)

like image 524
Jon Avatar asked Nov 22 '11 19:11

Jon


2 Answers

Reset Content and Setting didn't work.

Here's what wasted 2 hrs of my late night time:

I had connected an UIControl outlet in the interface builder to the IBOutlet in the xib's owner. For some reason, the IBOutlet was deleted from the owner, but the reference to the outlet remained dangling in the xib. This would always give me the error

"Terminating app due to uncaught exception 'NSUnknownKeyException'" 

Lesson learnt: When deleting any outlets for vars in the implementation, make sure to unhook the respective connection in the IB

Update: (26 Jan 2015)

There's a good reason why the Interface Builder or the nibs behave this way, and I realized the why, today.

If you have an IBOutlet in TheBaseClass, and you have a nib or scene in the storyboard for a TheSubClass, there are two ways (hacks) available for you to connect this outlet:

  1. Under the Identity Inspector, name the "Custom Class" identifier to TheBaseClass, connect the outlet, then set the Class name in the "Custom Class" section to TheSubclass

  2. Add the IBOutlet in your TheSubclass code, connect it to the ui element in the nib, add the IBOutlet code in TheBaseClass, delete that code in TheSubClass

When I came across this answer it just fell in place, as to why Apple would let this dangling reference problem remain as is. Because, this is not a bug. This is a feature.

like image 126
Nitin Alabur Avatar answered Sep 21 '22 10:09

Nitin Alabur


Fixed - went to iOS Simulator > Reset Content and Setting

like image 42
Jon Avatar answered Sep 20 '22 10:09

Jon