Display Alert Message from viewDidLoad Display Alert Message from viewDidLoad xcode xcode

Display Alert Message from viewDidLoad


OK not a bug, the issue is that in viewDidLoad the view hierarchy is not fully set. If you use viewDidAppear, then the hierarchy is set.

If you really want to call this alert in viewDidLoad you can do so by wrapping your presentation call in this GCD block to cause a slight delay, waiting for the next run loop, however I suggest you don't (it's ugly).

dispatch_async(dispatch_get_main_queue(), ^ {    [self presentViewController:alert animated:YES completion:nil];});


to move this call to the viewDidAppear: method.


You have to embed a navigation controller and present the controller

- (void)viewDidLoad {  [super viewDidLoad];  //A SIMPLE ALERT DIALOG   UIAlertController *alert =   [UIAlertController                          alertControllerWithTitle:@"My Title"                          message:@"Enter User Credentials"                          preferredStyle:UIAlertControllerStyleAlert];   UIAlertAction *cancelAction = [UIAlertAction                           actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel action")                           style:UIAlertActionStyleCancel                           handler:^(UIAlertAction *action)                           {                               NSLog(@"Cancel action");                           }];   UIAlertAction *okAction = [UIAlertAction                       actionWithTitle:NSLocalizedString(@"OK", @"OK action")                       style:UIAlertActionStyleDefault                       handler:^(UIAlertAction *action)                       {                           NSLog(@"OK action");                       }];   [alert addAction:cancelAction];   [alert addAction:okAction];   [self.navigationController presentViewController:alert animated:NO completion:nil];   //    [self presentViewController:cameraView animated:NO completion:nil]; //this will cause view is not in the window hierarchy error}

OR

  [self.view addSubview:alert.view];  [self addChildViewController:alert];  [alert didMoveToParentViewController:self];