popViewControllerAnimated 的错误使用

最近,业务提出了一个需求,在从主界面跳转到2级界面的时候,如果解析文件有错误,则直接跳转回主界面。

这是一个连ios开发菜鸟一看都可以很快得出答案的问题,很简单啊,用navigation controller 的 popViewControllerAnimated 的方式,直接就可以跳转到之前界面了。

可是,看似简单的需求,却让我这个有几年工作经验的人郁闷了好久。

在进入2级页面的时候,起线程,然后线程返回错误,这个时候需要跳转,调用回到主线程跳转的方法

 [selfperformSelectorOnMainThread:@selector(back)withObject:nil

                           waitUntilDone:YES];



-(void)back{

    [self.navigationControllerpopViewControllerAnimated:YES];

 }


界面直接跳转出去了。而且二级页面的析构函数也被调用,没有内存问题,故事到这里貌似很完美。等等。

当第二次再打开界面的时候,同样的步骤,却出现了不同的结局。界面代码执行了,界面没有跳转,反而顺利的调用了了析构函数,把界面释放掉了。结果就是显示了一个被释放掉的2级界面。 o m g , 刚开始我一直以为是线程调度的问题,可是研究了好久,发现代码没啥问题哦,于是各种找,把大几千行的俩界面看了个遍,仿佛都没啥问题。这是怎么回事呢?为什么第一次跳转正常,第二次就失败而且导致崩溃呢??

也许很多大神现在该喷我了。呵呵,确实,我忽略了一个关键的问题。

就是下面这个每天都伴随我们的,可是我们却经常视而不见的奇葩函数,-(void) viewDidAppear:(BOOL)animated;

这个函数不用多介绍了,每次进入界面,都会调这个方法。第一次我进入了2级界面之后,在我解析完成之前系统就调用了这个方法,于是我解析错误就直接正常退出了。但是天杀的系统,我再次进入2级界面之后,解析完成的时候,竟然还没有调用-(void) viewDidAppear.导致我直接跳转界面会失败。这个小问题,花费了我个把小时,所以不吐不快。于是,加上了判断,界面随便进入一点问题都没有。

-(void) viewDidAppear:(BOOL)animated{

    _viewDidAppear =YES;

    if(_parseBookError){

        [selfperformSelectorOnMainThread:@selector(back)withObject:nil

                           waitUntilDone:YES];

    }

}


- (void)parseError:(NSString*)msg{

    _parseBookError = YES;

   if(_viewDidAppear)

            [self performSelectorOnMainThread:@selector(back) withObject:nil

                                waitUntilDone:YES];

}



看来经验主义会害死人啊,我没有想到界面都显示了,-(void) viewDidAppear 还没有正常被调用。以后要注意了。如果能帮到各位,希望各位给我留个好啊。



  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值