美文网首页iOS学习笔记 ios零碎记录iOS开发技术
iOS程序闪退时的处理一句代码搞定异常拦截

iOS程序闪退时的处理一句代码搞定异常拦截

作者: iCode_ | 来源:发表于2016-11-22 15:28 被阅读3183次

       APP在使用时难免出现BUG甚至引起闪退,这在很大程度上降低了用户的体验度。这个封装类,可以拦截到系统异常并弹出警告框(AlertView),即在APP闪退时,由用户决定是退出还是继续。宝宝再也不用担心APP闪退了这在某种程度上能够提高用户的体验度。GitHub传送门。先上图

       这是一种自定义的样式,当然您可以下载demo后查看一下默认样式。在自定义设置时采用“链式编程”(我的这一篇文章《iOS,Objective-C链式编程简谈》有介绍)。

而且使用超简单,只需一句代码搞定:

1.导入头文件 #import "SPUncaughtExceptionHandler.h"

2.在Appdelegate里面只需调用捕捉异常类的一个方法如下:


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

InstallUncaughtExceptionHandler();

return YES;

}

已添加cocoapods支持: pod search SPUncaughtExceptionHandler

另外将日志存储在本地Documents文件夹下,并提供了获取日志文件路径的方法

只要整个程序有任何地方崩溃,它都能够捕捉到:(然后你在任何一个文件中写一个会导致程序崩溃的方法,比如给一个Button添加方法,但是并没有实现方法)

⚠️注:不要在debug环境下(会出现只拦截一次的情况)测试。因为系统的debug会优先去拦截。要运行一次后,关闭debug状态(不连接Xcode)。即直接点击我们在模拟器或真机上build的app去运行。

GitHub地址有任何问题您可以留言

😊如果对您还有所帮助,记得在github上给颗星哦😊

相关文章

网友评论

  • 爱勤海之旅:这个以前可用,现在直接卡死了,不能起到拦截的作用了。
  • 2446bd55c043:跟友盟异常统计冲突了,还是会闪退
  • 686d3d9a620a:我现在拦截到崩溃后程序直接卡死了,不会弹框,是怎么回事
    iCode_:@686d3d9a620a 你崩溃代码应该是在viewController的生命周期函数中,估计这样会导致主线程卡死,然而弹窗等UI操作需要在主线程中进行,因此弹窗不能显示。但是你可以查看一下那个崩溃的日志文件,里面是有记录该崩溃信息的。
    686d3d9a620a:@淡漠烟薰 -[__NSArrayM objectAtIndex:]: index 8 beyond bounds [0 .. 6] 这种。真机。崩溃后直接就卡死了。只能杀掉后台
    iCode_:能否具体一下,比如系统版本、真机还是模拟器,如果知道崩溃的类型就更好了,能使我方便复现您的问题
  • 英俊神武:其实应该是奔溃之后,让它返回上一级的,不应该奔溃的啊,这个方案可以再优化的
  • 狂人_9572:请问楼主,异常后怎样查看异常日志文件
    iCode_:@狂人_9572 如果是模拟器,finder,command+shift+g,粘贴打印的日志路径,回车就是那个文件了。真机的话,工程开文件共享在iTunes里能看到,或者把文件上传到服务器
  • 阿噗阿噗阿:请问 最大拦截次数可以无上限么?如果设置无上限会造成什么后果么?
  • 此用户名被使用:提示框隐藏好像就无法拦截闪退了
  • Mickey丶:可以 非常不错
  • H4S: 我添加后 写了一个数组越界 还是闪退呢 ?
    af8be591eb1b:是不是友盟或是腾讯bugly有冲突,被他们先拦截到了。:smile:
    af8be591eb1b:我也试了下,数组越界的也是闪退,两种模式都不行!
    iCode_:@H4S 是release模式吗
  • 848e33812d39:大神,这个 我的 程序 内存 闪退 没有提示啊
    iCode_:@上河道的符 内存闪退是什么意思,内存过高吗?
  • d920e665d3d1:挺好
    iCode_:@蒋俊杰 谢谢支持:grin:
  • KennyHito:不够楼主也挺厉害了 :+1:
    iCode_:@海涛丶Larry 技术无止境:smile:
  • KennyHito:我不知道这个到底可以应用到什么地方,就是弹出一个对话框,到最后程序还是崩溃了,只不过不闪退而已;
    iCode_:@海涛丶Larry 你点继续程序不会推出还可继续运行啊,只不过可能会出现其他错误。而且你也可以用这段时间,做一些处理,比如把日志上传到服务器:blush:
  • dongshangtong:可以了
    iCode_:@dongshangtong 快乐Coding,共同成长:smile:

本文标题:iOS程序闪退时的处理一句代码搞定异常拦截

本文链接:https://www.haomeiwen.com/subject/zagppttx.html