如何正确呈现视图控制器?

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

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

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

 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from  to  while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed' 

实施此类行为的正确方法是什么?

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

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

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

D.当出现初始视图控制器VC_A或VC_B时,应用程序应忽略此标志。

这样做的一个缺陷是,如果在视图控制器处于过渡状态时按下按钮或本地通知已过期,则新VC将不会显示。 如果需要,可以改进该逻辑以在其之后呈现它。

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