Unbalanced calls to begin/end appearance transitions for

本文详细分析了在iOS应用中频繁切换子视图控制器时出现的警告信息,并通过实例展示了如何避免这种警告的产生。通过增加判断条件,确保在切换视图控制器时避免重复调用已有的控制器,从而有效解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unbalanced calls to begin/end appearance transitions for XXXX

(2013-06-03 10:27:21)
标签: 

切换视图控制器

 

unbalanced

 

xcode

 

iphone

 

object-c

分类: 错误分析

在iOS 5.0 中加入了x方法。让我们编程中加入子视图控制器(viewController)变的很简单。

但是,最近在使用中,却出现了,控制台,输出的警告信息:

Unbalanced calls to begin/end appearance transitions for .


一、错误原因

网上搜索了,一下,报这样的警告,是因为:过于快速切换子视图控制器,导致,前一个切换动作还没有完成,就进行了下一个切换!

果真时这样?

先看看,我出现该警告的环境吧。

1.加入子控制器

// 加入子控制器

    [self addChildViewController:self.saleInfoVC];

    [self addChildViewController:self.recommendVC];

    [self addChildViewController: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) {

[self transitionFromViewController:_currentMainController

  toViewController:self.saleInfoVC

  duration:0

  options:UIViewAnimationOptionTransitionNone

animations:^{

                                    // NOPS;

                                }

completion:^(BOOL finished){

                                    [self.viewShowaddSubview:self.saleInfoVC.view];

_currentMainController = self.saleInfoVC;

                                    

}

         ];

    }else if(paramIndex==2){

[self transitionFromViewController:_currentMainController

  toViewController:self.recommendVC

  duration:0

  options:UIViewAnimationOptionTransitionNone

animations:^{

                                    // NOPS;

                                }

completion:^(BOOL finished){

                                    [self.viewShowaddSubview:self.recommendVC.view];

_currentMainController = self.recommendVC;

                                    

}

         ];

    

    

    }else if(paramIndex==3){

[self transitionFromViewController:_currentMainController

  toViewController:self.msgInfoVC

  duration:0

  options:UIViewAnimationOptionTransitionNone

animations:^{

                                    // NOPS;

                                }

completion:^(BOOL finished){

                                    [self.viewShowaddSubview:self.msgInfoVC.view];

_currentMainController = self.msgInfoVC;

                                    NSLog(@"%d",[self.msgInfoVC.viewretainCount]);

                                    

}

         ];

        

        

    }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;

    }



希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值