嵌套推动画iOS7的错误?

问题描述:

我刚刚遇到了一个我经过测试的应用程序的问题。我敲我的头向墙上理解为什么我得到这个错误:嵌套推动画iOS7的错误?

2013-11-25 09:02:55.687[186:60b] nested push animation can result in corrupted navigation bar 
2013-11-25 09:02:56.055[186:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2013-11-25 09:02:57.666[186:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview' 

一段时间,我创建了一个新的项目,试图重现错误后:

这happends当我按下两个不同时段的酒吧按钮项目,然后同时发布。我正在使用带有segues的故事板,并且没有任何自己写的代码。这是一个iOS7的错误,还是我错过了什么?

我一直无法重现的模拟器,因为我没有两个光标...我使用一个iPad2与iOS7故事板的7.0.3

图片:

enter image description here

编辑:

,因为我得到砸了,没有没有人甚至试图重现并确认这个bug完全downvoted,我已经报告说,它无需确认。

EDIT2:

苹果要求一个堆栈跟踪。但是,既然我给了他们重现的确切步骤,我没有打扰。这不是我的工作。所以请随时举报。

+0

如果您尝试点击任何按钮,它将如何生成错误 – codercat

+0

我按下两个栏按钮项目,按住它们。并同时发布。 – ullstrm

+0

这不是一个编程问题,如果你认为它是一个错误,它应该真的在苹果电路板或雷达上。 – Fogmeister

这可能是因为你在同一时间调用两个segues,当你释放按钮时,应用程序试图在其他segue完成之前调用一个segue。

所以我能看到的是,Xcode提出的警告是因为你的一个视图控制器是由segue触发的,另一个视图控制器的segue被触发而不等待第一个视图控制器的加载结束。

您可以尝试设置bool或某种控制器,用于检查第一个视图控制器何时加载,然后在知道第一个视图控制器已正确加载时触发另一个继续。

+0

是的,我现在用自己的布尔标志手动执行segues以检查它是否安全。苹果进行越野车赛格代码。为什么他们鼓励我们在故障车时使用故事板? – ullstrm

+1

我在使用Apples开发人员工具进行编程时遇到的大多数问题和错误都与我自己的错误有99.9%的时间有关,所以我无法真正评论Xcode错误。 – Oskariagon

+0

这正是为什么我在这里发布了这个消息,看看是否有其他人可以在发布关于苹果的bug报告之前进行复制。 – ullstrm

我是通过以下操作让我的应用程序相同的问题: 1登录(赛格瑞与动画进行) 2迅速作出新的屏幕上进行选择(启动另一赛格瑞)

,如果你尝试在上一个过渡动画完成之前执行一个继续,它可以将其拧紧。所以我在执行segue之前添加了一个延迟,它似乎修复了它。然而,我不认为这是最终的解决方案,因为segue动画持续时间可能会因设备速度有所不同而有所不同。

我认为最好的解决方案是触发继续的AFTER viewDidAppear。

我刚刚实现了类似的东西,它现在正在工作。

所以我有视图控制器A,B & C.通常用户可以从A导航到B,从B导航到C,但现在我创建了一种用户可以自动从A导航到C(通过B)的方式。

我所做的是在B中创建一个公共方法来推C这种方法看起来像:

- (void)pushC { 
    if ([self isViewLoaded] && self.navigationController.visibleViewController == self && ![self isBeingPresented] && self.didViewAppear) { 
     [self performSegueWithIdentifier:@"CSegue" sender:self]; 
    } 
    else { 
     [self performSelector:@selector(pushC) withObject:nil afterDelay:0.4f]; 
    } 
} 

一切都已经从didViewAppear财产给你开。那一个我在- viewDidAppear上设置为true。

然后,我只需要调用- pushC在视图控制器A的- prepareForSegue方法正如我们所看到的,他会等待合适的时机,以实际调用下一SEGUE。

这工作正常,但显示所有的导航过渡,我不需要。我宁愿能够将一棵树推入导航控制器,这样我只有一个转换导航。好吧,我想我以后必须回到这个东西。

这就是说我不认为这是一个错误,但实际上是iOS7行为的变化,因为动画变长了。