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)
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:
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
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.
Fixed - went to iOS Simulator > Reset Content and Setting
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With