I’m trying to get a ViewController hooked up to a tab in a TabController. I’ve set the tab type to be a NavigationController, and my ViewController subclass as the tab’s identity. I’ve also set the NIB name for the tab. When I use any of the other tabs with NavigationContollers, everything works, yet one particular view throws an exception, this class is not key value coding-compliant for the key txtPassword.
2011-07-14 17:11:10.784 myApp[5027:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x5a36500> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key txtPassword.'
*** Call stack at first throw:
(
0 CoreFoundation 0x013305a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x01484313 objc_exception_throw + 44
2 CoreFoundation 0x013304e1 -[NSException raise] + 17
3 Foundation 0x00195677 _NSSetUsingKeyValueSetter + 135
4 Foundation 0x001955e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
5 UIKit 0x0061930c -[UIRuntimeOutletConnection connect] + 112
6 CoreFoundation 0x012a68cf -[NSArray makeObjectsPerformSelector:] + 239
7 UIKit 0x00617d23 -[UINib instantiateWithOwner:options:] + 1041
8 UIKit 0x00619ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
9 UIKit 0x004cf628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
10 UIKit 0x004cd134 -[UIViewController loadView] + 120
11 UIKit 0x004cd00e -[UIViewController view] + 56
12 UIKit 0x004cb482 -[UIViewController contentScrollView] + 42
13 UIKit 0x004dbf25 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
14 UIKit 0x004da555 -[UINavigationController _layoutViewController:] + 43
15 UIKit 0x004db870 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
16 UIKit 0x004d632a -[UINavigationController _startDeferredTransitionIfNeeded] + 266
17 UIKit 0x005f12e9 -[UILayoutContainerView layoutSubviews] + 226
18 QuartzCore 0x00f5aa5a -[CALayer layoutSublayers] + 181
19 QuartzCore 0x00f5cddc CALayerLayoutIfNeeded + 220
20 QuartzCore 0x00f020b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
21 QuartzCore 0x00f03294 _ZN2CA11Transaction6commitEv + 292
22 QuartzCore 0x00f0346d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
23 CoreFoundation 0x0131189b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
24 CoreFoundation 0x012a66e7 __CFRunLoopDoObservers + 295
25 CoreFoundation 0x0126f1d7 __CFRunLoopRun + 1575
26 CoreFoundation 0x0126e840 CFRunLoopRunSpecific + 208
27 CoreFoundation 0x0126e761 CFRunLoopRunInMode + 97
28 GraphicsServices 0x01acd1c4 GSEventRunModal + 217
29 GraphicsServices 0x01acd289 GSEventRun + 115
30 UIKit 0x0042bc93 UIApplicationMain + 1160
31 myApp 0x00001f44 main + 102
32 myApp 0x00001ed5 start + 53
)
terminate called after throwing an instance of 'NSException'
The property is declared as in the interface for the ViewController (a subclass of UINavigationViewController and exposed as a property. It’s also synthesized and hooked up in IB like the rest of the controls, yet for some reason throws this exception.
Is there any way to track down the cause?
It turned out I had the class identity of a Tab in my UITabController set to an instance of a UINavigationController subclass, and the tab’s type was set to navigation controller. What I needed was to set the class identity of the UIView within the tab, not the tab itself.