this class is not key value coding-compliant for the key

[ xx setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name xxx.

或者

 Unknown class XXX in Interface Builder file

环境说明:

使用的storyboard ,写了xxxViewcontroller,有连线。

问题:

今天突然发现 点击xxxViewcontroller所在的页面app闪退,这个页面很久没动过了 所以 第一反应是这个页面后端是不是改了什么不合约定的东西(简单页面没有写实体类,直接用的数组和字典)。

按钮跳转写法如下

UIViewController * vc =  [[UIStoryboard storyboardWithName:@"xxxx" bundle:[NSBundlemainBundle]]instantiateViewControllerWithIdentifier:@"xxxxxxxKey"];

[vc setValue:self forKey:@"delegate"];

[self.navigationController pushViewController:vc animated:YES];


经检查发现 点击按钮进时,根本就没有执行到xxxViewcontroller页面的代码,

走到[vc setValue:self forKey:@"delegate"];//这就闪退了。

就报了上面那第一个错误。

 根据经验,应该是xxxViewcontroller页面的属性delegate和写的字符串不对应。

但是这里很久了 不可能这里写错那么久都没有发现。

所以检查了一下 xxxViewcontroller 果然是没有写错。然后又检查了xxxViewcontroller对应的连线 也没有问题。

然后 尝试了各种 去掉连线 还是错, 去掉class不闪退,所以问题就在classs上。。

问题原因:问题出现在上面的第二句上 。去掉class不闪退的情况说明了这一点,但是这个页面代码根本就还没有执行,所以不存在说因为代码的问题导致了闪退。

加上最近升级了xcode12.1 修改了编译方式,不确定是否可这个问题有关。

最终:

发现xxxViewcontroller没有被包含在项目里!!! 

项目---targets---你的target ---Build Phases---Compile Source 

 这个页面是确实在用着的,为什么会没有包含在项目里?也去确实没有记得什么时候去掉过这个功能,一般去掉也只是隐藏入口,不会移除包含在项目编译。

结论:

所以 只有一个可能,那就是页面(项目---targets---你的target ---Build Phases---Compile Source )打开的时候 关了屏幕 或者午睡的时候脸滚到了键盘上,导致删除了这个文件的包含。。。。。。







  • 顶 :
  • 踩 :