迅速pushViewController、popToViewController引发的导航紊乱、崩溃

最近遇到一个导航栏异常相关的问题,问题描述以下:新建一个viewcontroller 而后用导航 session

pushViewController展现出来, app

代码以下: ide

// spa

        RCSGroupSettingVC *v = [[RCSGroupSettingVC alloc]initWithGroupID:self.sessionUri]; ip

        v.hidesBottomBarWhenPushed = YES; ci

        [self.navigationController pushViewController:v animated:YES]; get


而后逻辑层有一个模块会向这个节目抛送一个通知,当收到这个通知后,这个节目会迅速从导航中pop出来, it

if (type == UI_RCSGroup_groupHasBeenDel) io

    { table

        //id<RCSParticipant> group = [param objectForKey:@"param"];

        NSString * groupId = [para objectForKey:@"param"];

        if ([groupId isEqualToString:_group.ID])

        {

            

           

                NSMutableArray *navigationStack = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];

                if  ([navigationStack containsObject:self])

                {

                    id objc = [(RCSBaseNavigationController *)self.navigationController getViewControllerByClass:[RCSMsgBoxViewController class]];

                    if (objc)

                    {

                        // 消息盒子

                        [self.navigationController popToViewController:objc animated:NO];

                    }

                }

                

            

            else{

                 _bGroupIsDelete = YES;

            }

        

            

        }

        

        return;

    }



此时因为pushviewcontroller到导航栏中要进行一下操做,迅速的pop到其余viewcontroller或者popTorootviewcontroller就会引发,导航栏的错乱,或者界面释放后刷新不了,依然展现在导航栏中,再次操做该界面就会引发崩溃。

遇到这种问题的解决方法就是将抛送过来的通知的响应放到viewdidappear中处理,让导航栏的pushviewcontroller处理完,界面展现出来后,全部初始化处理完后,在popToViewcontroller,此时就不会有异常了。

//通知里面设置一个变量,表示要popviewcontroller了

if (type == UI_RCSGroup_groupHasBeenDel)

    {

        //id<RCSParticipant> group = [param objectForKey:@"param"];

        NSString * groupId = [para objectForKey:@"param"];

        if ([groupId isEqualToString:_group.ID])

        {

            

                             _bGroupIsDelete = YES;

            }

        

            

        }

        

        return;

    }

//在 viewDidAppear方法中处理popviewcontroller

-(void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    

    if (_bGroupIsDelete)

    {

        NSMutableArray *navigationStack = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];

        if  ([navigationStack containsObject:self])

        {

            id objc = [(RCSBaseNavigationController *)self.navigationController getViewControllerByClass:[RCSMsgBoxViewController class]];

            if (objc)

            {

                // 消息盒子

                [self.navigationController popToViewController:objc animated:NO];

            }

        }

    }

    

    

    _bHaveDidAppear = YES;

}

相关文章
相关标签/搜索