iOS 7有关嵌套推送动画的Bug?

5

我刚刚遇到了一个与我进行缺陷测试的应用程序有关的问题。我一直在努力理解为什么会出现以下错误:

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'

过了一会儿,我创建了一个新项目,试图重现这个bug:

当我同时按下具有不同转场的两个条形按钮,并在同一时间释放时,就会出现这种情况。我正在使用具有转场的故事板,并且完全没有自编写的代码。这是iOS7的bug还是我遗漏了什么?

由于我没有两个光标,所以无法在模拟器上重现。我使用的是装有iOS7 7.0.3的iPad2。

故事板的图片如下:

enter image description here

编辑:

由于没有人尝试重现和确认此bug就狂砸我并且对我进行了严厉的贬低,所以我报告了这一点而没有经过确认。

编辑2:

苹果公司要求提供堆栈跟踪。但是由于我已经给出了重现的确切步骤,所以我没有费心做这件事。这不是我的工作。所以请随意报告此问题。


我同时按住两个栏按钮,然后同时松开。 - ullstrm
正如Fogmeister所指出的那样,如果您发现了一个可重现的错误,请在http://bugreport.apple.com上记录它。 - Robotic Cat
你的图片和问题不应该相似。导航栏按钮在哪里? - codercat
@iDev 是的,他在视图底部有一个工具栏。 - Fogmeister
我正在进行应用程序的漏洞测试。这就是为什么。一个应用程序不应该因为你做了一些不必要的事情而崩溃。 - ullstrm
显示剩余8条评论
3个回答

0

我刚刚实现了类似的功能,现在它工可以作了。

所以我有视图控制器 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。
然后我只需要在视图控制器A中的-prepareForSegue方法中调用-pushC。正如我们所看到的,他将等待合适的时间来实际调用下一个segue。
这样做还不错,但会显示所有的导航转换,而我不需要。我更希望能够将一棵树推入导航控制器中,这样我就只有一个过渡导航。好吧,我想我以后会再回来处理这个问题。
这么说吧,我认为这不是一个错误,而实际上是iOS7中行为的改变,因为动画变慢了。

0
我在我的应用程序中遇到了同样的问题,解决方法如下: 1. 登录(使用动画执行segue) 2. 快速在新屏幕上进行选择(启动另一个segue)
如果在前一个转换动画完成之前尝试执行segue,则可能会出现问题。因此,在执行segue之前添加延迟似乎可以解决这个问题。 但是,我认为这不是最终解决方案,因为segue动画持续时间可能会因设备速度而异。
我认为最好的解决方案是在viewDidAppear之后触发segue。

0

可能是因为您同时调用了两个segue,当您释放按钮时,应用程序尝试在另一个segue完成之前调用一个segue。

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

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


是的,我现在正在使用自己的布尔标志手动执行segue以检查它是否安全。苹果的segue代码有问题。为什么他们鼓励我们使用storyboard segue,当它们有缺陷呢? - ullstrm
1
我在使用苹果开发工具进行编程时遇到的大多数问题和错误都是由于我的疏忽,所以我不能真正评论Xcode的错误。 - user2707185
这正是我在这里发布的原因,想要看看是否有其他人在提交苹果的错误报告之前能否重现此问题。 - ullstrm
我刚发现了这个帖子。遇到了同样的问题。我的顺序是Banner > Main(容器嵌入)> detail(push)到notes(push)。我也收到了“nested push animation can result in corrupted navigation bar”和“Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted”的警告(确实如此)。我可以通过使用xib来解决这个问题,但我宁愿不这样做。有什么解决方法吗? - ICL1901

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接