问题
在开发过程中,连接UILabel到xib中时出现以下错误:
* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key XXX.'
什么原因?如何解决呢?
原因分析及初步对策
-
可能是Xib文件中对应的view controller类名错误导致,请检查controller对应的类名。
-
在从一个controller中复制、粘贴元素到另一个viewcontroller中时,即使编辑、重新连接元素,但Xcode仍然可能会保持原有controller的连接,此原因可能会导致上述错误。请仔细检查每个元素的对应关系!
-
错误的Outlet。或许在开发过程中移除了.h文件中的outlet,但是该元素仍然存在于xib中。在Connection Inspector中检查元素并移除废弃的outlet。
1>.选中对象,打开’Connections Inspector’.
2>.在’Referencing Outlets’ 下检查该对象是否连接到旧属性名,如果是点击‘X’删除该引用并重新编译程序。
-
Xib的File’s Owner下的view的outlet属性为空。如果view是从别的地方整体复制过来,请记得将view连接到Xib的File’s Owner的View属性上。请仔细检查File’s Owner,Control-单击如下:右下角黄色警告即为问题所在!!!
-
Xib或者stroyboard中的UI元素被多个变量持有。例如一个UIButton连接了多个Action。解决办法:
1>.打开Xib或者stroyboard,右击UIButton
2>.你将会看到该按钮被指定了多个方法,请保留正确的任务,确保只有一个。
-
single target模式下,要选中"Inherit From Target"属性,多target模式下选择正确的target。
-
Nib文件名错误或找不到,例如初始化过程中,initWithNibName指定的Nib文件名找不到。仔细检查此原因相关的文件!
BMTester *viewController = [[BMTester alloc] initWithNibName:@"Nib名称错误" bundle:nil];
后续处理
若根据上述步骤仔细检查后仍报错,按以下步骤处理:
- Shift + Command + K 或者Xcode中点击"Product->Clean",然后编译并运行程序!
- 删除模拟机中的软件,编译并运行程序!
- 清除XCode的 DerivedData,打开XCode -> Preferences -> Locations -> Open the DerivedData 文件夹,将其移到废纸篓。编译并运行程序!