最近項(xiàng)目中遇到一個問題,寫了一個繼承于NSObject的類用于處理服務(wù)器返回的數(shù)據(jù),其中當(dāng)服務(wù)器返回某個數(shù)值時會執(zhí)行跳轉(zhuǎn)到登錄頁面的操作,比如登陸過期,但是發(fā)現(xiàn)實(shí)際上是無法觸發(fā)VC跳轉(zhuǎn)的,報出警告如下:
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];
查閱資料才了解到應(yīng)該是VC的生命周期執(zhí)行順序?qū)е麓a無法觸發(fā),最后找到解決辦法,代碼如下:
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];