Application tried to present modally an active controller

    今天碰到一个试图present一个视图Crash的问题,按道理来说,去present一个视图不应该出现这种情况,后来经过与测试人员人员沟通才得知,只有在出现帐号异常的情况下,去打开附件页面的时候才会出现,然后就顺着这条线索查找,最终找到原因,是因为服务端接口返回帐号异常错误之后呢,通过通知中心去帐号异常页面present出来,这种逻辑是没有问题的,但是确实是在出现帐号异常之后出现了Crash,Why?再仔细查看发现,这个帐号异常页面是个单例,而且present这个页面的时候还有判断该页面是否已经present出去了,如果已经打开,就直接return,奇怪的是没有走判断是否已经打开的逻辑。

    工程里面打开这个帐号异常的地方就一个,是通过通知中心进行回调的,那就从通知中心回调查找入手,最终发现由于这个接口异常错误返回不止一个接口会触发,因为网络请求是全局的,触发多次是也有可能的,这个Crash的问题就是触发再次这个通知回调,这就与bugly反馈的信息对上了,附图如下:


    问题找到了,就知道怎么解决了,主要是判断当前帐号异常页面是否已经present失效导致,

self.presentingViewController != nil

即两次调用异常页面show方法时判断self.presentingViewController是否为nil失效,为了解决这个问题,在通知中心回调时延时1秒再去调用异常页面的Show方法,这样第二次再回调时,判断self.presentingViewController已经有值,就不会再去试图present一个已经存在的ViewController.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值