最近项目中遇到一个问题,写了一个继承于NSObject的类用于处理服务器返回的数据,其中当服务器返回某个数值时会执行跳转到登录页面的操作,比如登陆过期,但是发现实际上是无法触发VC跳转的,报出警告如下:
Warning: Attempt to present <UINavigationController: 0x7f818a07f200> on <UINavigationController: 0x7f818a024400> whose view is not in the window hierarchy!
代码如下:
EALoginViewController *loginVC = [EALoginViewController new];
UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:loginVC];
[topRootViewController presentViewController:navc animated:YES completion:nil];
查阅资料才了解到应该是VC的生命周期执行顺序导致代码无法触发,最后找到解决办法,代码如下:
UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController)
{
topRootViewController = topRootViewController.presentedViewController;
}
EALoginViewController *loginVC = [EALoginViewController new];
UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:loginVC];
[topRootViewController presentViewController:navc animated:YES completion:nil];