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 )打开的时候 关了屏幕 或者午睡的时候脸滚到了键盘上,导致删除了这个文件的包含。。。。。。
- 顶 :
- 踩 :
发表评论