[iOS开发教程]Unknown class XXX in Interface Builder file.
程序员文章站
2022-04-22 20:44:33
今天在项目中引用一个自定义view的xib的时候,Xcode报了这个错误:
2017-09-22 21:09:51.455716+0800 sdkpds[14577:5464...
今天在项目中引用一个自定义view的xib的时候,Xcode报了这个错误:
2017-09-22 21:09:51.455716+0800 sdkpds[14577:5464131] Unknown class BindCardFooter in Interface Builder file. 2017-09-22 21:09:51.458085+0800 sdkpds[14577:5464131] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key nexBtn.'
这个xib是从别的项目中拷贝到此项目中,在原项目此xib的类文件(包括.h和.m)运行是没有任何问题的。引进这个项目就报错了。
首先尝试打开xib文件查看outlet连接是否有黄色的警告,检查过程中没有发现警告;
接着查看view对应的CustomView的class属性是否设置,检查发现已经正确设置过了;而且右键点击界面上每个组件,Referencing Outlet都能显示该组件的外联关系。
注:期间尝试过在file’s owner中设置CustomView的class,然后重新建立组件跟file’owner的关系,前提是去掉了view的CustomView属性设置,发现这个方法不行。
后来干脆把界面上的组件的Outlet全部删掉,再重新建立关系,发现还是一样报错。
这个看视简单的问题整整折腾了3个小时无果,人几乎到了崩溃的边缘…
究其原因,可能的解释是:XXClass只在nib文件中被引用, 其它地方没有被引用到, 因此被link优化掉, 运行时nib文件试图加载XXClass时, 产生运行时错误。
后来我在引用xib之前加了这么一句话,问题就解决了,总结来讲,这个问题是Xcode 编译,链接的问题,第一次遇到过,所以记录一下,希望可以提醒自己及帮助同样遇到此问题的小伙伴们。
Class cls = [XXClass class];
另外,如果在SDK中引用xib,在代码中bundle加载需要这样:
NSString *rescourcePath = [[NSBundle mainBundle] pathForResource:@"Resource" ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:rescourcePath]; [tableView registerNib:[UINib nibWithNibName:@"BindCardCell" bundle:bundle] forCellReuseIdentifier:@"BindCardCell"];
同时需要注意,xib文件先要拖到Resource的bundle里面去。