关于UIImagePickerController使用3DTouch的Crash问题

最近公司项目APP报一个崩溃问题:

一.问题分析

+[NSObject previewingContext:viewControllerForLocation:]: unrecognized selector sent to class 0x...... 

看方法得知previewingContext:viewControllerForLocation:这个方法是在iOS推出3DTouch功能之后才有的API,可是公司的APP暂时还没有集成3DTouch功能,这就奇怪了.万般google之后终于找到了问题所在:
导致这个crash的原因是当用户从照片库中选择图片的时候使用3DTouch功能预览图片的时候导致的.这应该是iOS9的SDK一个BUG.
https://forums.developer.apple.com/thread/21932
http://stackoverflow.com/questions/33331758/uiimagepickercontroller-crashing-on-force-touch
苹果官网和SOF有对此问题的描述.
目前来说触发的环境为:

硬件: iPhone6S和iPhone6S Plus
软件: iOS9之后的版本

二.解决方案

既然定位到了问题解决起来就容易了.我们可以利用Runtime替换掉系统的这个方法,不做任何操作就可以了.网上有个工具https://gist.github.com/nolanw/bd0a8997632fe92a9f83
完美解决了这个问题.实现原理就是利用Runtime实现方法替换.链接可能打不开(翻墙吧),因此我也把这个库上传到了此处https://github.com/Herb-Sun/MSDPreventImagePickerCrashOn3DTouch 方便大家下载.

三.使用方法

将这个类拖到工程中去,然后在

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方法中调用MSDPreventImagePickerCrashOn3DTouch()即可.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 之前看到 Masonry 是使用链式编程,感觉很酷,自己简单的写了一个链式编程的示例! 首先简单的来说一下链式编程...
    insence阅读 240评论 0 1
  • 夏天 在我的一生里 走了又来 循环播放 就像你已经离开 却在我的记忆里 年年岁岁 朝朝暮暮 反复归来
    汩月阅读 574评论 0 1
  • 01 2017.7.12一个普通的日子,太阳依旧那么毒,独自一人来到了杭州。欲把西湖比西子,淡妆浓抹总相宜,杭州...
    胡汉三Running阅读 344评论 0 0
  • 97跨年演唱会的时候,在压轴曲目《追》结尾的时候,哥哥说:“我希望你们永远记得我,因为你们每晚给我的掌声、欢呼声,...
    超级卡司阅读 362评论 0 1