UIStoryboard Reference 和根视图控制器

UIStoryboard Reference and root view controller

我有一个 "Main" 情节提要,在这个情节提要中我有一个链接到另一个情节提要 "Login" 的情节提要参考实体。我注意到当我尝试使用以下内容访问当前屏幕上的视图时:

[[[[UIApplication sharedApplication]delegate]window]rootViewController]

它返回 "Main" 故事板上的视图,但如果我尝试在此视图上推送 UIAlertController,我会收到以下错误:

Warning: Attempt to present <UIAlertController: 0x1839a000> on <ViewController: 0x17633ad0> whose view is not in the window hierarchy!

有什么原因我不能将此视图推到顶部,如果不是,我如何从 "Login" 情节提要中获取当前显示的实际 uiviewcontroller?

如果您从 viewDidload 中呈现 UIAlertController 那么它可能会像这样发生,因为当时加载视图时它不在 windows 层次结构中,直到它完全加载。

第二件事你必须在最顶层的视图控制器上呈现 UIAlertController,例如,

 [self presentViewController......];

不在 windows rootViewController 上。所以,这取决于你是怎么做的。

请使用这个

 -(id)getTopViewController{


               UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

                while (topController.presentedViewController) {
                    topController = topController.presentedViewController;
                }
                if (![topController isKindOfClass:[NSNull class]]) {

                    return topController;
                }



        }

像这样使用这个方法

 UIViewController *viewOb = [self getTopViewController];

使用viewOb来呈现ViewController。