iOS: Warning "attempt to present ViewController whose view is not in the window hierarchy" iOS: Warning "attempt to present ViewController whose view is not in the window hierarchy" ios ios

iOS: Warning "attempt to present ViewController whose view is not in the window hierarchy"


You are trying to present a view controller from the rootViewController. In your case I think the rootViewController is not the current ViewController. Either you presented or pushed a new UIViewController on top of it. You should present a view controller from the top most view controller itself.

You need to change:

UIViewController *vc = self.view.window.rootViewController;[vc presentViewController: activityController animated: YES completion:nil];

to:

[self presentViewController: activityController animated: YES completion:nil];


Analysis:Because the present modal view ViewController class has not been loaded into the window.This is equivalent to the building, second floor haven't built, directly go to cover 3 floor, this is definitely not.Only after load ViewController's view ;

Python

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated];    [self showAlertViewController];}- (void)showAlertViewController {    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Hello world" message:@"(*  ̄3)(ε ̄ *)d" preferredStyle:UIAlertControllerStyleAlert];    // Create the actions.    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"hello" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {        NSLog(@"The \"Okay/Cancel\" alert's cancel action occured.");    }];    UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"world" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        NSLog(@"The \"Okay/Cancel\" alert's other action occured.");    }];    // Add the actions.    [alertController addAction:cancelAction];    [alertController addAction:otherAction];    UIWindow *windows = [[UIApplication sharedApplication].delegate window];    UIViewController *vc = windows.rootViewController;    [vc presentViewController:alertController animated: YES completion:nil];}

This's worked for me.


Replace line:

UIViewController *vc = self.view.window.rootViewController;[vc presentViewController: activityController animated: YES completion:nil];//to[self presentViewController:activityController animated: YES completion:nil];

or

[self.navigationController pushViewController:activityController animated:YES];