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

前端 未结 4 1760
半阙折子戏
半阙折子戏 2020-12-14 00:05

I am getting following warning when I try to present a ActivityController on navigation controller,

Attempt to present 

        
相关标签:
4条回答
  • 2020-12-14 00:21

    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];
    
    0 讨论(0)
  • 2020-12-14 00:29

    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.

    0 讨论(0)
  • 2020-12-14 00:42

    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];
    
    0 讨论(0)
  • 2020-12-14 00:42

    I faced the similar issue in iPhone 6+.

    In Swift 2.0

    let obj = self.storyboard?.instantiateViewControllerWithIdentifier("navChatController") as! UINavigationController
    obj.modalPresentationStyle = .FormSheet
    obj.modalTransitionStyle = .CoverVertical
    
    Constants.APPDELEGATE.window?.rootViewController?.presentViewController(obj, animated: false, completion: nil)
    

    I solved it by this way.

    0 讨论(0)
提交回复
热议问题