多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
xib都会addSubview添加到控制器view中时程序崩溃。错误提示: `NSInvalidArgumentException', reason: '-[ **UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x7ffae1c1b680'` 错误很明显说的是 ,找不到**[ **UITapGestureRecognizer superview]方法. 看看存在问题的代码: ~~~ - (void)viewDidLoad { [super viewDidLoad]; ToolBar *toolBar = [ToolBar toolBar]; [self.view addSubview:toolBar]; } ~~~ ~~~ #import "ToolBar.h" @implementation ToolBar //返回xib view +(instancetype)toolBar{ NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"ToolBar" owner:nil options:nil]; return [arr lastObject]; } @end ~~~ 看代码我们想要返回的是ToolBar 对象,怎么返回了UITapGestureRecognizer??? 在toolBar方法打印bundle中ToolBar的数组,发现存在两个对象。而且第一个不是我们想要的TooBar ![](https://box.kancloud.cn/2016-03-07_56dd40108d882.jpg) 再看看xib,真的有两个对象。 ![](https://box.kancloud.cn/2016-03-07_56dd4010ac1aa.jpg) 结论:基本可以确定[arr lastObject]; 返回的不是我们想要的结果。 改为[arr firstObject]问题就解决了。 所以以后xib返回的是数组那一个才是我们想要的,要搞清楚。 ps:xib对象是按照放进去的顺序排列的,上图看到的上到下的顺序不一定是xib文件的对象顺序。