Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

popViewControllerAnimated 的错误使用

$
0
0

最近,业务提出了一个需求,在从主界面跳转到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 还没有正常被调用。以后要注意了。如果能帮到各位,希望各位给我留个好啊。



作者:diqun1314 发表于2013-3-29 11:41:44 原文链接
阅读:50 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>