初始化UISearchBar时遇到 [UIView setImage:]: unrecognized selector sent to instance 崩溃

4 篇文章 0 订阅
2 篇文章 0 订阅

初始化UISearchBar时遇到 [UIView setImage:]: unrecognized selector sent to instance 崩溃

一、发现问题

在项目中想添加一个UISearchBar ,我本来以为so easy ,啪啪三下五除二,敲完代码后,满心欢喜的运行了程序,没有想到,程序崩了。报错如下:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setImage:]: unrecognized selector sent to instance 0x1058194b0'
*** First throw call stack:
(0x1ba3ebef8 0x1b95b9a40 0x1ba303154 0x1e716e034 0x1ba3f1810 0x1ba3f34bc 0x1e71c8808 0x1e71c89c8 0x1e71bbeec 0x1e71c8794 0x1e71c47b0 0x102d87c30 0x1e747de4c 0x1e707f750 0x1e707fa58 0x1e70809e8 0x1e7081ce8 0x1e7013e30 0x1e7469998 0x1be9cda34 0x1be9d29c4 0x1be9319d4 0x1be9602f4 0x1be96115c 0x1ba379b94 0x1ba374828 0x1ba374dc8 0x1ba3745b8 0x1bc5e8584 0x1e6dbb558 0x102d88d50 0x1b9e34b94)
libc++abi.dylib: terminating with uncaught exception of type NSException

我去,我一看[UIView setImage:]无法识别?我仔细看了一下我初始化的代码发现也并没有用到这个方法呀,于是开始排查问题。

二、问题排查

我以前有遇到过 unrecognized selector sent to 这种类型的报错,可能是对象提前释放,然后我仔细排查了一下,发现我并没有弱引用。然后我去检查看一下崩溃日志,然后发现

Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib        	0x00000001b9f819fc __ulock_wait + 8
1   libsystem_platform.dylib      	0x00000001b9ff58f8 _os_unfair_lock_lock_slow + 172
2   libobjc.A.dylib               	0x00000001b95c4868 lookUpImpOrForward + 136
3   libobjc.A.dylib               	0x00000001b95d1098 _objc_msgSend_uncached + 56
4   UIKitCore                     	0x00000001e783d9f8 -[__UITextTiledLayer setBounds:] + 88
5   UIKitCore                     	0x00000001e7439264 -[UIView _createLayerWithFrame:] + 396
6   UIKitCore                     	0x00000001e7439e48 UIViewCommonInitWithFrame + 808
7   UIKitCore                     	0x00000001e7439ac8 -[UIView initWithFrame:] + 124
8   UIKitCore                     	0x00000001e7837c98 -[_UITextFieldContentView initWithContentContextProvider:] + 60
9   UIKitCore                     	0x00000001e7384190 -[UITextField _initContentView] + 56
10  UIKitCore                     	0x00000001e736a7c0 -[UITextField initWithFrame:] + 404
11  UIKitCore                     	0x00000001e71caa48 -[UISearchBarTextField initWithFrame:] + 44
12  UIKitCore                     	0x00000001e71c88e8 -[UISearchBar+ 7813352 (UISearchBarStatic) _setupSearchField] + 64
13  UIKitCore                     	0x00000001e71bac90 -[UISearchBar initWithCoder:] + 1264
14  UIKitCore                     	0x00000001e6e3bd64 -[UIClassSwapper initWithCoder:] + 248
15  UIFoundation                  	0x00000001c4a07e88 UINibDecoderDecodeObjectForValue + 744
16  UIFoundation                  	0x00000001c49a6b3c -[UINibDecoder decodeObjectForKey:] + 320

我发现创建UISearchBar 的时候后面会调用UITextField的创建方法。我想哦~问题可能出在这上面,可是我还是一头雾水,翻查了一下文档,和各种资料,然后突然在 一篇文章中找到了一条线索。
在这里插入图片描述

三、问题解决办法

上面这条线索让我把注意力移到了类扩展和分类上面去排查问题。崩溃日志最后是UITextField,所以我就把目标主要看UITextField 的分类或者扩展,当我看到下方分类时突然看到里面的代码
在这里插入图片描述
在这里插入图片描述
也同样进行leftView的操作,我会心一笑,问题应该就是这个了,我试着把这个分类先去除以后,果然问题就迎刃而解了。

四、结束语

本人也在不断的学习以及摸索中,如有不对的地方欢迎指出,在下方回复或者邮件都可以,谢谢大家的阅读。

参考文章:https://stackoverflow.com/questions/38749894/uiview-setimage-unrecognized-selector-sent-to-instance-when-init-uisearchcon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值