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
再看看xib,真的有兩個對象。
結論:基本可以確定[arr lastObject]; 返回的不是我們想要的結果。 改為[arr firstObject]問題就解決瞭。 所以以後xib返回的是數組那一個才是我們想要的,要搞清楚。
ps:xib對象是按照放進去的順序排列的,上圖看到的上到下的順序不一定是xib文件的對象順序。