1

我有一个非常简单的应用程序UIViewControllers(比如VC_AVC_B)。每个屏幕都有一个按钮,允许切换到另一个屏幕(不UINavigation使用)。

应用程序安排一个本地通知,当它过期时,应该呈现另一个视图控制器(VC_N - 无论当前哪个屏幕处于活动状态)。

问题是有时应用程序会抛出:

'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from  
<VC_A: 0x2021e0> to <VC_N: 0xf84b970> while a transition is already in progress. 

Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'

实现这种行为的正确方法是什么?

4

2 回答 2

1

A. 使用 UIViewController 的新 presentViewController:animated:completion 来呈现所有三个控制器,而不是旧的 modal 方法。

B. 创建一个布尔标志并将其初始化为 NO。

C. 在任何视图控制器演示之前,检查这个标志。如果是,设置为否。然后介绍VC。在完成块中,再次将标志设置为 YES。

D. 当呈现初始视图控制器(无论是 VC_A 还是 VC_B)时,应用程序应忽略此标志。

一个陷阱是,如果一个按钮被按下或本地通知过期,而视图控制器已经处于转换状态,那么新的 VC 将不会被呈现。如果需要,可以改进此逻辑以在之后呈现它。

于 2013-04-20T08:58:24.097 回答
0

当计时器到期时,不要在该计时器处理程序方法中调用视图表示。而是尝试将视图演示调用放在单独的方法中并使用 [self performSelector: withObject: afterDelay:] 调用该方法(延迟可能为 0.1]。这应该在当前转换完成时完成视图演示。

于 2013-04-20T09:00:47.607 回答