不平衡通话开始/结束的外观转换为不平衡通话开始/结束的外观转换为(Unbalanced calls

2019-05-13 09:55发布

我有这个问题时,我模仿我的应用程序,它不是一个错误或警告,但它出现在我的控制台,有没有人曾经经历过这个?

Answer 1:

在我的情况下,当你在一个tableview中单击两个选项卡非常快出现此错误。

其结果会导致错误的TITLENAME,返回按钮消失。 有人提到,当你推一个视图, set animated:NO 。 该错误会消失,但还是引起了一些奇怪的行为。 它推两种观点,那么你需要返回两次取回的tableview屏幕。

方法我试过,以解决此问题:

添加BOOL cellSelected;

viewWillAppear cellSelected = YES;

在didselectcell委托if (cellSelected){cellSelected = NO; do action ; } if (cellSelected){cellSelected = NO; do action ; }

这有助于防止点击两个不同的细胞非常快。



Answer 2:

在我的情况下,它发生了,当我触发[self performSegueWithIdentifier:@"SomeIdentifier" sender:self];UINavigationControllerviewDidLoad方法。

它移入viewDidAppear方法解决了这个问题。

究其原因很可能是在viewDidLoad不是所有的花哨的动画已经在完成了,而viewDidAppear一切都完成了。



Answer 3:

我也有这个问题。 我发现了两个解决方案,这一问题:

  1. 你可以在上面看到这个解决方案。
  2. 我发现从子类UINavigationController地方这个问题解决了。 缓冲导航控制器


Answer 4:

你应该在不同的循环中运行代码来避免这个

 double delayInSeconds = 0.1;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
        });


Answer 5:

我有很多的问题,同样的问题。 我通过这种方式解决了这个

1)您没有使用UIViewController's指定初始化initWithNibName:bundle: 。 尝试使用它,而不是只是init

2)组animated:YES到NO,而解决了这个问题。 例如。 [self.navigationController pushViewController: viewController_Obj animated:NO];



Answer 6:

我一直在使用导航控制器相同的问题,推动其他控制器它。 我试图用缓冲导航控制器和其他几种方法,但它并没有为我工作。 花一些时间想出来后我发现,如果你试图同时在建先前的交易(动画)(约0.5秒的时间我猜的)推新视图控制器出现此问题。 无论如何,我做了委托导航控制器,等待前面的动画完成快速的解决方案。



Answer 7:

确保你不要忘了在-viewWillAppear,-viewDidAppear,-viewDidLoad,-viewWillDisappear,-viewDidDisappear调用适当的超级方法在你的那个方法超载。 例如,在我来说,我不匹配这样的方法名称:

-(void)viewDidAppear
{
 [super viewDidDisappear];
 //some code staff
 ..
}

出现消失的方法是不匹配的通知



Answer 8:

发展不平衡的呼叫开始/最终外观的转变“

说的是没有做最后的相关动画之前的动画开始。 那么,你大跌眼镜推新之前的任何视图控制器? 或者可以弹出根? 如果是尝试没有动画就是这样做[self.navigationController popToRootViewControllerAnimated:NO];

看看是否能解决问题,对我来说,这并获得成功。



Answer 9:

信息的原因:得到显示此消息当且仅当你是推/呈现从另一个视图控制器viewWillAppearloadViewinitviewDidLoad当前视图控制器的方法

方法,以消除错误信息:移动你的推/呈现代码viewDidAppear方法就能解决问题



Answer 10:

我有参与倒带模态对话框类似的问题。 发布解决方案在这里...

https://stackoverflow.com/a/38795258/324479

[问题]

导航控制器 - > VC1 -push - > VC2 -PopOver或模态Segue公司 - > VC3。

VC3被平仓回VC1。

当Segue公司从VC2到VC3是酥料饼和模态,在放松身心的警告结尾:不平衡的呼叫开始/结束的外观转换为的UIViewController”

如果从Segue前向VC VC是推,报警消失了。

[解]

这将是巨大的,如果开卷逻辑将照顾这。 也许这是一个错误,也许不是。 无论哪种方式,解决的办法是让VC2倒带的目标,然后等待它完成弹出导航控制器出庭(具有弹出式控制器)。 这确保倒带(反向弹出)的动画有足够的时间进一步向后移动之前完成。 即使在动画了,它仍然必须等待,否则你得到的错误。

您的VC2代码应该如下。 (迅速)

class VC2: UIViewController {
    private var unwind = false
    @IBAction func unwindToVC1(segue:UIStoryboardSegue) {
        unwind = true
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if unwind {
            self.navigationController?.popViewControllerAnimated(false)
        }
    }
}


Answer 11:

如果添加了模态视图控制器作为子图的图可能会出现这种情况。 最佳使用方法:

-(void) viewDidAppear:(BOOL)animated {
    [self presentViewController:self.yourModalVC animated:YES completion:nil];
}

它基本上是说认为生命周期不精简了那些你试图显示,然后viewControllers。



Answer 12:

我试图做时,类似的问题:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];

在像函数- (void) popUpToLevelTwo; ,并把一个return; 在函数结尾解决了这个问题



Answer 13:

我也有这个在

[self dismissModalViewControllerAnimated:YES];

我改变了YESNO ,这解决了这个问题。



Answer 14:

我有当我用navigationcontroller的流行方法在我的应用我使用一个单独的逻辑导航控制器同样的问题,因此避免了使用导航栏,它总是隐藏。 然后我用一个自定义视图并通知处理后退按钮,它的事件。 通知观察员登记,并不会被删除。 因此,通知闪光两次,并创建了上述的错误。 检查你的代码throughly为获得这种故障的



Answer 15:

对于它的价值,我在不包括通话同样的错误[super viewDidLoad:animated]在我viewDidLoad覆盖。



Answer 16:

我也有这个问题,当我拍了拍从笔尖的按钮。 原来我不小心连线按钮发送事件两个IBAction为方法,每个做了pushViewController:动画:



Answer 17:

我不得不实施等推动一些逻辑UIViewController ,直到所有的数据被下载。 交谈中,有逻辑的错误,导致推UIViewController太早,而仍然有另一个正在进行的API调用。

它造成了同样UIViewController要通过两次推UINavigationController ,给了这个警告。



Answer 18:

我得到了这个问题,因为我打电话从没有的viewController一个UITabbar UIPrintInteractionController,也不UINavigationBar的。 看来,UIPrintInteractionController没有得到正确的printInteractionControllerParentViewController。 在实施委托的方法和返回当前RootViewController的工作对我来说。

    - (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;


Answer 19:

我有,当我忘记设置打破了这个问题; 推图在switch语句之后!

像这儿:

case 1:{

        SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
        [self.navigationController pushViewController:someViewController animated:YES];
        [someViewController release];
    }

        break; //Forgetting to set break here:


Answer 20:

错误背后的原因“不平衡通话开始/结束的外观转变”是当您导航| 同时Segue公司两次



Answer 21:

一个解决办法是,

[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];


Answer 22:

如果你想这样完成加载之前解雇一个UIViewController您可以进入这个运行。

我曾在控制台此消息,并完全聚焦于被呈现新的UIViewController的UIViewController中,都没有成功。 我终于发现了这个问题,在我提出了驳回本身,因为用户没有登录到他们的帐户的UIViewController。

希望这可以帮助别人。



Answer 23:

这是一个艰难的一个对我说:我已经覆盖

override func shouldAutomaticallyForwardRotationMethods() -> Bool {
    return true
}

无覆盖:

override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
    return true
}

在我的窗根导航控制器。 然后子导航控制器推动与上述警告另一个视图控制器时抱怨。 警告还不是最坏的,大问题是,有孩子的导航控制器的代表都不再叫。 weired。



Answer 24:

以我为例,我取NSDataNSURL内“ viewDidLoad ”方法。



Answer 25:

斯威夫特4

我的问题是,我提出另一个VC之前,我目前的一个成品中呈现。

解决方案是一个快速延迟后提出我nextVC。

什么你不应该这样做

override func viewDidLoad() {
    super.viewDidLoad() 
    self.present(MyNextVC(), animated: true, completion: nil)
}

你应该做的

override func viewDidLoad() {
    super.viewDidLoad() 
    //Wait until the view finished to be constructed
    perform(#selector(showMyNextVC), with: nil, afterDelay: 0.01)
}

@objc func showCityList() {
    self.present(MyNextVC(), animated: true, completion: nil)
}


文章来源: Unbalanced calls to begin/end appearance transitions for