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];