警告“尝试呈现视图不在窗口层次结构中的 ViewController - Objective C
Posted
技术标签:
【中文标题】警告“尝试呈现视图不在窗口层次结构中的 ViewController - Objective C【英文标题】:Warning “attempt to present ViewController whose view is not in the window hierarchy - Objective C 【发布时间】:2018-01-16 20:13:20 【问题描述】:我正在尝试调用控制器,如果有响应错误,并将用户重定向到登录控制器。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"EventManagerStoryboard" bundle:[NSBundle mainBundle]];
LoginViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginID"];
[loginController viewDidLoad];
loginController.showOnlyLoginForm = YES;
[self presentViewController:loginController animated:YES completion:Nil];
我面临这个警告 -
尝试呈现 试图呈现 LoginViewController: 0x7fc958201130 on ProfileController: 0x7fc9583118e0,其视图不在窗口层次结构中!
【问题讨论】:
我建议使用'loadViewIfNeeded'而不是直接调用viewDidLoad
回调
你应该永远自己调用viewDidLoad
- 一旦加载了视图控制器的视图,它就会自动调用
@MilanNosáľ 没有区别。
我的笔记是关于对viewDidLoad
的调用,它不应该解决你的问题。无论如何,错误消息很容易解释。当self
没有出现时你的代码被调用,所以self
不能出现其他视图控制器。但是没有更多的上下文,没有人会更好地帮助你。发生这种情况的原因可能有几十或几百个,但没有看到其余代码我们只能猜测。换句话说,您显示的代码是可以的,问题出在代码的其余部分。
【参考方案1】:
不要在 viewDidLoad 中运行此代码,在 viewDidAppear 中尝试一下
[self presentViewController:loginController animated:YES completion:Nil];
编辑:
如果你实现了navigationController,在appDelegate中使用
[(UINavigationController *)self.window.rootViewController pushViewController:vc animated:YES];
【讨论】:
其实我是在connectionDidFinishLoading中运行的 是否显示 ProfileController 或您实现 connectionDidFinishLoading 的位置 我正在我的应用委托上实现 connectionDidFinishLoading。当有一些响应错误时,我会强制注销用户。 您可以实现导航控制器来完成此操作,因为 appDelegate 中没有 viewController 来呈现您的登录信息或使用通知中心/委托来告诉另一个 viewController 来制作呈现而不是 appdelegate 但是您的日志表明您希望在名为 ProfileController 的 viewController 中呈现它,即使是自我呈现......也不会在应用委托中运行以上是关于警告“尝试呈现视图不在窗口层次结构中的 ViewController - Objective C的主要内容,如果未能解决你的问题,请参考以下文章