2015-09-27 88 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にアラートが表示されます。

私は次のビューのライフ・サイクル・コールバック内の指定されたViewController,にあなたのコードを入れて、iOSの8と9の両方で単一のビューのアプリケーションテンプレートでコードを実行しました:

  • viewDidAppearは -
  • viewWillAppearに成功しました - 示されたアラートはありません。コンソールに次の出力が表示されます。警告:ウィンドウの階層に表示されていないビューを表示しようとしました!
  • viewDidLoad - アラートは表示されません。コンソールでこの出力が発生しました。割り当て解除中にView Controllerのビューをロードしようとすると、未定義の動作()が発生する可能性があります。私はいくつかのいずれかが利益を得ることができ、それが正常に動作します

     [self showMessage:YES]; 
    

    このメソッドを呼び出す

+0

なぜあなたはviewDidLoadにアラートコントローラを表示したいのですか?ビューをロードしていて、それを必要以上に提示していない場合はどうでしょうか? – JAL

+0

最初の質問に答えるには、ビューが表示されるとすぐにアラートを表示することができます。しかし、Magnaのコードが 'viewDidLoad'にあった場合、私は単にそれを言及していました。私は、Storyboard(Single View Applicationテンプレート)を使用して、コードをiOS 9の 'viewDidLoad'メソッドの中に入れようとしましたが、エラーが発生しました:割り当てが解除されている間にView Controllerのビューを読み込もうとすると、結果は未定義の動作になります()。私はいくつかの説明で私の答えを拡大します。 – 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]; 

}

関連する問題