最近遇到一个导航栏异常相关的问题,问题描述以下:新建一个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;
}
遇到这种问题的解决方法就是将抛送过来的通知的响应放到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;
}