在iOS 5.0 中加入了x方法。让我们编程中加入子视图控制器(viewController)变的很简单。
但是,最近在使用中,却出现了,控制台,输出的警告信息:
Unbalanced callsto begin/end appearance transitions for .
一、错误原因
网上搜索了,一下,报这样的警告,是因为:过于快速切换子视图控制器,导致,前一个切换动作还没有完成,就进行了下一个切换!
果真时这样?
先看看,我出现该警告的环境吧。
1.加入子控制器
//加入子控制器
[selfaddChildViewController:self.saleInfoVC];
[selfaddChildViewController:self.recommendVC];
[selfaddChildViewController:self.msgInfoVC];
// 设置frame
self.saleInfoVC.view.frame=self.viewShow.bounds;
self.recommendVC.view.frame=self.viewShow.bounds;
self.msgInfoVC.view.frame=self.viewShow.bounds;
// 加入View
[self.viewShow addSubview:self.saleInfoVC.view];
[self.viewShow addSubview:self.recommendVC.view];
[self.viewShow addSubview:self.msgInfoVC.view];
_currentMainController=self.saleInfoVC;
2.控制,子控制器间的切换
-(void)changeViewByIndex:(int) paramIndex{
self.view.userInteractionEnabled = NO;
if (paramIndex==1) {
[selftransitionFromViewController:_currentMainController
toViewController:self.saleInfoVC
duration:0
options:UIViewAnimationOptionTransitionNone
animations:^{
// NOPS;
}
completion:^(BOOL finished){
[self.viewShow addSubview:self.saleInfoVC.view];
_currentMainController =self.saleInfoVC;
}
];
}else if(paramIndex==2){
[selftransitionFromViewController:_currentMainController
toViewController:self.recommendVC
duration:0
options:UIViewAnimationOptionTransitionNone
animations:^{
// NOPS;
}
completion:^(BOOL finished){
[self.viewShow addSubview:self.recommendVC.view];
_currentMainController =self.recommendVC;
}
];
}else if(paramIndex==3){
[selftransitionFromViewController:_currentMainController
toViewController:self.msgInfoVC
duration:0
options:UIViewAnimationOptionTransitionNone
animations:^{
// NOPS;
}
completion:^(BOOL finished){
[self.viewShow addSubview:self.msgInfoVC.view];
_currentMainController =self.msgInfoVC;
NSLog(@"%d",[self.msgInfoVC.view retainCount]);
}
];
}else{
//NOPS;
}
self.view.userInteractionEnabled = YES;
}
注意:该方法,写的冗余了,可以重构一下。
经过调试,我发现,只要不重复的切换3个视图,那么无论切换多快,都不会报以上,警告;当我连续切换某个(执行if(paramIndex==1)中的transitionFromViewController方法切换时)视图控制器时,就会报以上的警告。
可见,出现错误的原因是:当某个viewController已经别调用到前面时,就不应该再次调用transitionFromViewController方法,重复将其调用到前面。
二、解决方法
加个判断呗,首先判断要调入前边的viewController是否已经到了前面!是,则不在使用transitionFromViewController方法来重复调用。
加入判断:
if (paramIndex==1 &&[self.saleInfoVC isEqual:_currentMainController]) {
return;
}
if(paramIndex==2 &&[self.recommendVC isEqual:_currentMainController]) {
return;
}
if(paramIndex==3 &&[self.msgInfoVC isEqual:_currentMainController]) {
return;
}
希望对你有所帮助!