iOS:popViewController意外行为

Chr*_*oph 49 xcode uinavigationcontroller ios

我一直在网上寻找解决方案.我找不到任何东西.所以:我正在使用UINavigationController.我正在推动两个UIViewControllers.在第二个推送ViewController我正在执行此代码:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog([error localizedDescription]);
[self.navigationController popViewControllerAnimated:YES]; }
Run Code Online (Sandbox Code Playgroud)

预期的事情将是最后推送的ViewController消失.在这个应用程序中,我在很少的地方这样做,它在这个非常ViewController期望的任何地方工作正常.会发生什么是只有后退按钮离开屏幕(动画),但其他一切都停留在屏幕上.在控制台输出中,执行此行时会打印出两个内容:

2011-03-14 16:32:44.580 TheAppXY [18518:207]嵌套弹出动画可导致导航栏损坏

2011-03-14 16:32:53.507 TheAppXY [18518:207]在意外状态下完成导航过渡.导航栏子视图树可能已损坏.

两个错误消息我找不到任何信息.我正在使用XCode 4和iOS SDK 4.3.也许任何人都可以帮我解决这个问题.

Vis*_*hry 50

我在我的代码中遇到了类似的情况,消息说:

嵌套推送动画可能导致导航栏损坏

在意外状态下完成导航过渡.导航栏子视图树>可能已损坏.

我对这个问题的发现是我一个接一个地连续推动2个视图控制器并且都是动画的.

在你的情况下,似乎你可能会一个接一个地使用动画弹出多个视图控制器.

因此,当一个视图正在进行动画时,您不应该在另一个视图上开始动画.

我还发现,如果我在一个视图上禁用动画,则错误消息消失.

在我的情况下,这是流逻辑的问题,因为我不打算一个接一个地推送2个视图控制器.一个被推入开关盒逻辑,另一个被推到结束.

希望这有助于某人.

  • 他们在这里关键是:"......两者都是动画." 谢谢! (10认同)
  • 谢谢,当我改为`Animated:YES`到`Animated:NO`并在`viewDidAppear`上调用我的pop方法解决了问题 (3认同)

Gra*_*yer 28

你可以随时尝试弹出这个viewDidAppear.如果您设置了一个标志,那么只需检查该标志viewDidAppear,就不会有问题.


And*_*rew 12

我已经为UINavigationController创建了一个替代品,它将为您排队动画并完全避免这个问题.

BufferedNavigationController中获取