嵌套推animationiOS7的错误?
我刚刚遇到了一个错误testing的应用程序的问题。 我正猛地把头靠在墙上,明白为什么我得到这个错误:
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'
一段时间后,我创build了一个新的项目,试图重现该错误:
这发生在我按下两个不同时间的酒吧button项目,然后同时释放。 我正在使用与segues故事板,没有任何自己写的代码。 这是一个iOS7的错误,或者我错过了什么?
我没有能够在模拟器上重现,因为我没有两个游标…我使用的iOS2 7.0.3的iPad2
故事板的图像:
编辑:
由于我被砸了,完全downvoted甚至没有人甚至试图重现和确认这个bug,我已经报告没有确认。
EDIT2:
苹果要求一个堆栈跟踪。 但是,既然我给了他们重现的确切步骤,我没有打扰。 这不是我的工作。 所以请随时举报。
这可能是因为你同时调用两个segues,当你释放button的时候,应用程序试图在另一个segue完成之前调用一个segue。
所以我可以看到,Xcode提出的警告是因为你的一个视图控制器是由segue触发的,另一个视图控制器的segue被触发,而不用等待第一个视图控制器的加载结束。
您可以尝试设置bool或某种控制器,以检查第一个视图控制器何时加载,然后在知道第一个视图控制器已正确加载时触发另一个继续。
我在我的应用程序中遇到了同样的问题,如下所示:1login(使用animation执行segue)2快速在新屏幕上进行select(启动另一个segue)
如果您在上一个过渡animation完成之前尝试执行一个循环,则可能会将其拧紧。 所以我在执行segue之前加了一个延迟,好像修复了它。 不过,我不认为这是一个最终的解决scheme,因为不同的animation持续时间可能会有所不同,具体取决于设备的速度。
我认为最好的解决办法就是触发这个继续的AFTER viewDidAppear。
我刚刚实现了类似的东西,现在正在工作。
所以我有视图控制器A,B和C.通常用户可以从A导航到B,从B导航到C,但现在我创build了一种用户可以自动从A导航到C(通过B)的方式。
我所做的是在B中创build一个公共方法来推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
属性之外,所有东西都已经给了你。 那个我设置为true - viewDidAppear
。
然后我只需要在视图控制器A中的- prepareForSegue
方法上调用- pushC
就可以了。正如我们所看到的,他将等待正确的时间来调用下一个segue。
这工作正常,但显示所有的导航过渡,我不需要。 我宁愿能够将树推入导航控制器,所以我只有一个转换导航。 那么我想我以后会回来的。
这就是说,我不认为这是一个错误,但实际上是在iOS7行为的变化,因为animation变得更长。