当前位置: 移动技术网 > IT编程>移动开发>IOS > [iOS开发教程]Unknown class XXX in Interface Builder file.

[iOS开发教程]Unknown class XXX in Interface Builder file.

2018年02月25日  | 移动技术网IT编程  | 我要评论

马云照片,金瓶双艳 下载,covert

今天在项目中引用一个自定义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里面去。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网