UIApplication(BTGMethodSwizzler) btg_swizzleSendEvent: 崩溃

74 篇文章 0 订阅
66 篇文章 0 订阅

先描述本人遇到的问题:

1.在iPad上,iOS8的系统,点击某个cell,崩溃,崩溃到的位置是 [UIApplication(BTGMethodSwizzler) btg_swizzleSendEvent:]

2.在iOS 9的系统及以上,无崩溃,但是所有的cell都没有事件响应

经调研资料显示:
[UIApplication(BTGMethodSwizzler) btg_swizzleSendEvent:] 是bugtags的 .a 静态库中的一个 category ,这个 category 扩展了一个 UIApplication 类的一个方法 sendEvent:

通过 Hopper 查看这个 .a 静态库中的category BTGMethodSwizzler 实现了什么,然而,并没有找到原因。

然后我自己在我的app中的某个类也实现了这个category,对 btg_swizzleSendEvent: 方法进行交换,发现了一个有趣的事儿,就是我点击某个cell,被我交换的那个方法有响应了,但是并没有转发到我点击的那个cell。所以问题,就发生在了,我这个项目中,某个文件在执行代码的时候,肯定把所有的gesture都删除了,导致事件全部失效;

所以我就在我们公司的群里问了问,果真,有位同事改bug的时候,想要删除他的一个gesture,所以他的代码是 [self.superview removeGestureRecognizer:_tap]; _tap 是那个gesture的变量;
这句代码就造成了,由于在运行过程中,不知道 self.superview 是哪个,就会意外的把所有的gesture都移除掉了,主要是 _tap 变量还是 nil

所以我的解决方案就是:
- 在 remove 手势时,一定是在 [self removeFromSuperview]; 之前

如果读者没有发现这样的代码,那就要检查,你app的 keywindowrootViewController 下的 userInteractionEnabled 是否为YES;还要检查它们的手势是否启用/可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值