2012-03-16 25 views
0

nilMyアプリケーションはいくつかのチェックを実行してから、アプリケーションがアクティブになるたびにUIAlertViewと表示する必要があります。これを行うために私はdidBecomeActiveNotificationのために登録し、ここで私のチェックを実行します。起動時に警告メッセージが表示されるUIAlertView

問題が発生した私のUIAlertView初回起動時にポップアップするたび、それはメッセージ「アプリケーションがアプリケーションの起動の最後にルートビューコントローラを有することが期待される」が発生します。私はこれが起こっていると推測しています。viewDidAppear:の前にUIAlertViewが表示されています。

UIAlertViewには、どうすればdidBecomeActiveNotificationが表示されますか?

2012-03-16 12:21:47.238 App[4181:707] viewDidLoad: 
2012-03-16 12:21:47.462 App[4181:707] didBecomeActiveNotification: 
2012-03-16 12:21:47.793 App[4181:707] Applications are expected to have a root view controller at the end of application launch 
2012-03-16 12:21:48.500 App[4181:707] viewDidAppear: 

編集:これを新しいプロジェクトで開始するには、次の操作を行います。

1新規プロジェクト - >シングルビューアプリケーション

2 Viewcontroller.mでViewController.mでviewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

3に以下を追加し

-(void)didBecomeActiveNotification:(NSNotification *)notification 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil]; 
    [alertView show]; 
    [alertView release]; 
} 

4次のメソッドを追加しますビルドと実行

+0

どのようにして 'didBecomeActiveNotification'のために登録していますか? –

+0

'' [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification :) name:UIApplicationDidBecomeActiveNotificationオブジェクト:nil]; ' – trapper

+0

を使って 'viewdidLoad'の中に' applicationDidBecomeActive' *および*でapp-delegateにアラートを表示しようとしましたが、あなたが提供したコードで登録されたルートビューコントローラのdidBecomeActiveNotificationが両方とも動作します。あなたのアプリに特別なものがあると思いますか?おそらく、ルートビューコントローラーの初期化ですか? –

答えて

0

私が言ったように、コンソールメッセージもコンパイラ警告もありません。 警告メッセージが表示され、警告なしでそのようなメッセージは表示されないことを確認できますか?

enter image description here

+0

はいアラートが表示されている場合にのみ発生します。私はあなたがシミュレータ5.1を使用しているのを見ていますが、5.0になっていますが、多分5.1で修正されたバグのようなものでしたか? – trapper

+0

@trapperあなたはおそらく正しいでしょう、私は再びメッセージを再現することができます5.0 'シミュレータ'。しかしここに良いニュースがあります:3.2と5.1の 'デバイス'のメッセージはもうありません。私は週末の後に再び5.0デバイスをテストすることができます。 –

+0

5.1シミュレータでテストしましたが、私はもはやエラーがありません。 – trapper

0

didBecomeActiveNotificationにない場合、私はUIAlertViewをどのようにトリガーしますか?

私はそれをルートビューコントローラで起動します。

+0

ルートビューコントローラが常にビュースタックの最上部にあるとは限りません。 –

+0

私はすでにrootViewControllerの上記のすべてをやっています – trapper

0

AppDelegateUIAlertViewsを起動できません。それはViewControllerによってのみ行うことができます。

アプリの起動時に何かをチェックしたり、アクティブになるときに何かをチェックしたり、ユーザにモーダルviewControllerを提示したいのと同様のことがあります。

+(BOOL)checkIfShouldShowAlert 

あなたがそのようにように、あなたのviewControllers' viewWillAppearの各方法でこのメソッドを呼び出すことができます:

if ([myCheckerClass checkIfShouldShowAlert]) { 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle... 
    [alertView show]; 
} 
私が何をしたか

は、一つの方法を持って新しいクラスを作成することでした

別のクラスを使うことで、コードをもっと簡単に更新できるようになります!

+0

私は正常にデリゲート 'applicationDidBecomeActive'でアラートを作成していますが、間違っている必要があります。また、慎重に質問を読むと、アラートがView Controllerに作成されます。 –

+0

ああ!その場合---通知が「アクティブになった」というのは、ビューが可視になるまでに既に呼び出されている可能性があります。そのため、viewControllerは、通知が発生した後に受信者として設定されます。 私はアプリケーションで単一のNSUserDefault BOOLを使用します。私はアプリが閉じる前にYESに設定し、viewControllerがmyCheckerClassを呼び出すのは初めてではありません。 – bryanjclark

+0

また、ストーリーボードを使用していますか? AppDelegateでRootViewControllerを決して作成しないように思えます。あなたのAppDelegateは "window"という属性を持っているはずです。 applicationDidFinishLaunchingでviewControllerを作成し、それをAppDelegateの「ウィンドウ」属性に割り当てることを確認してください。 – bryanjclark

関連する問題