2015-09-27 28 views
8

我试图添加一个UIAlertController到我的应用程序,但它并没有出现。我曾尝试以下内容:UIAlertController没有出现在所有

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Web Service is not available." preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
[alertController addAction:ok]; 

[self presentViewController:alertController animated:YES completion:nil]; 

但这并不出现,我做错了什么?

+0

此代码应该正常工作。你能告诉我们这段代码出现的上下文的其余部分吗? – JaredH

+0

你发布的代码看起来应该可以工作。你的方法看起来像你用来显示警报?该方法是否被调用? – Adrian

+0

您是否试图将此警报控制器显示在主线程之外?你甚至是从视图控制器提出它?你有什么错误吗? – JAL

回答

19

在故事板的初始视图控制器中,这必须在viewDidAppear:。否则,如果在XIB中使用,它还会在viewWillAppearviewDidLoad中显示警报。

我跑在单一视图的应用模板,你的代码的iOS 8,9两个,把你的代码放到指定的ViewController,在下面的视图生命周期回调:

  • viewDidAppear - 成功
  • viewWillAppear - 没有显示警报;在控制台中产生了这个输出:警告:尝试在其视图不在窗口层次中显示!
  • viewDidLoad - 未显示警报;导致在控制台中输出:试图在释放视图控制器的同时加载视图控制器的视图是不允许的,并且可能导致未定义的行为()。
+0

为什么你会想在viewDidLoad中显示一个警报控制器?如果你加载了一个视图但不能很好地呈现它呢? – JAL

+0

要回答您的第一个问题,您可能希望在出现视图后立即显示警报。但是,我只是提到,如果Magna的代码在'viewDidLoad'中。我只是尝试将自己的代码放在iOS 9的'viewDidLoad'方法中,并且使用Storyboard(Single View Application模板),并且出现错误:试图在释放视图控制器时加载视图控制器的视图是不允许的,并且可能导致未定义的行为()。我会用一些解释扩展我的答案。 – Sheamus

+0

只要视图出现,就不会调用viewDidLoad。这将是viewWillAppear。是的,在加载时在视图上呈现视图控制器是没有意义的。 – JAL

0
- (void)showMessage:(BOOL)animated { 

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Do not leave any Field Empty" message:nil preferredStyle:UIAlertControllerStyleAlert]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]]; 
[self present:alertController animated:YES completion:nil]; 

}

这里我把这种方法

 [self showMessage:YES]; 

正常工作可能有一个人得到好处。