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