ios – Xcode – How to fix NSUnknownKeyException, reason: … this class is not key value coding-compliant for the key X error?
Table of Contents
ios – Xcode – How to fix NSUnknownKeyException, reason: … this class is not key value coding-compliant for the key X error?
You may have a bad connection in your xib.
Ive had this error many times. While TechZens answer is absolutely right in this case, another common cause is when you change the name of a IBOutlet property in your .h/.m which youve already connected up to Files Owner in the nib.
From your nib:
- Select the object in IB and go to the Connections Inspector.
-
Under Referencing Outlets make sure that your object isnt still connected to the old property name… if it is, click the small x to delete the reference and build again.
Another common cause if you are using Storyboard, your UIButton might have more then one assignings (Solution is almost the same as for nib):
- Open your storyboard and right click the UIButton
-
You will see that there is more than one assign/ref to this button.
Remove one of the Main… greyed windows with the small x:
Your view controller may have the wrong class in your xib.
I downloaded your project.
The error you are getting is
NSUnknownKeyException, reason: [<UIViewController 0x3927310> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key string.
It is caused by the Second
view controller in MainWindow.xib
having a class of UIViewController
instead of SecondView
. Changing to the correct class resolves the problem.
By the way, it is bad practice to have names like string in Objective-C. It invites a runtime naming collision. Avoid them even in once off practice apps. Naming collisions can be very hard to track down and you dont want to waste the time.
Another possible reason for this error: when copying & pasting elements from one controller into another, Xcode somehow keeps that link to the original controller, even after editing & relinking this element into the new controller.
Another possible reason for this error:
Bad Outlet.
You have either removed or renamed an outlet name in your .h
file.
Remove it in .xib
or .storyboard
files Connection Inspector.
One more possible reason
(In my case) Extension of UIView with bindable properties and setting values for those bindable properties (i.e. shadow, corner radius etc.) then remove those properties from UIView extension (for some reason) but the following <userDefinedRuntimeAttributes>
remained in xml (of foo.storyboard
):
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type=color keyPath=shadowColor>
<color key=value white=0.0 alpha=1 colorSpace=custom customColorSpace=genericGamma22GrayColorSpace/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type=number keyPath=shadowOpacity>
<real key=value value=50/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type=point keyPath=shadowOffset>
<point key=value x=5 y=5/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type=number keyPath=shadowRadius>
<real key=value value=16/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type=number keyPath=borderWidthValue>
<real key=value value=0.0/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
Solution: Right click on foo.storyboard
> Open as Source Code > search by keyPath (i.e. shadowRadius) > Delete the </userDefinedRuntimeAttributes>
that causing the problem
ios – Xcode – How to fix NSUnknownKeyException, reason: … this class is not key value coding-compliant for the key X error?
Sometimes this has to do with your Inherit From Target That value has to be set. With single target apps you can just select Inherit From Target. If you have more then one target select the desired target.