2025-03-25

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文件的對象順序。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *