viewDidLoad()
メソッドからではなく、_ViewController.m
_のviewDidAppear()
メソッドからアラートメッセージを表示したい。
これが私のコードです:
_- (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 presentViewController:alert animated:YES completion:nil];
}
_
そして私はこのエラーを受け取ります:
警告:ビューがウィンドウ階層にない_
<UIAlertController: 0x7fbc58448960>
_に_<ViewController: 0x7fbc585a09d0>
_を表示しようとしています!
バグではありません。問題は、viewDidLoad
でビュー階層が完全に設定されていないことです。 viewDidAppear
を使用すると、階層が設定されます。
本当にこのアラートをviewDidLoad
で呼び出したい場合は、プレゼンテーション呼び出しをこのGCDブロックでラップして、次の実行ループを待ってわずかな遅延を発生させることができますが、そうしないことをお勧めします't(醜いです)
dispatch_async(dispatch_get_main_queue(), ^ {
[self presentViewController:alert animated:YES completion:nil];
});
この呼び出しをviewDidAppear:メソッドに移動します。
ナビゲーションコントローラーを埋め込み、コントローラーを提示する必要があります
- (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
}
[〜#〜]または[〜#〜]
[self.view addSubview:alert.view];
[self addChildViewController:alert];
[alert didMoveToParentViewController:self];