プロが教えるわが家の防犯対策術!

Xcode5.0でアプリを作成しています。
アプリがバックグラウンドから再びアクティブになるときに画面遷移の処理をするために
以下の方法にてAppDelegateのapplicationDidBecomeActiveからView Controllerに処理を渡しています。

AppDelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"applicationDidBecomeActive" object:nil];
}

ViewController.m
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:@"applicationDidBecomeActive"
object:nil];
}

- (void)applicationDidBecomeActive {
ViewController *View = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondView"];
[self presentModalViewController:View animated:YES];
}


ViewController.mの- (void)applicationDidBecomeActiveで画面遷移の処理をしたいのですが、ViewDidAppearでは出来る画面遷移がapplicationDidBecomeActiveでは実行されない状態です。
ググって調べたところ、読み込みのタイミングが問題らしいことはなんとなく解ったのですが、
どうにかして、- (void)applicationDidBecomeActiveと同じタイミング(アプリがアクティブになったとき)で画面遷移を行う方法はありますでしょうか?

A 回答 (2件)

xcode5で全くの新規プロジェクトに質問のコードを書いて


試してみたら、アプリをアクティブにしたタイミングで
意図通り画面遷移しました。

ただ、一番最初にViewControllerをロードしたタイミングで、
viewDidAppearが呼ばれる前にapplicationDidBecomeActiveが
呼ばれており、このタイミングで画面遷移すると、警告メッセージが
表示されました。(それでも画面遷移はします)
このタイミングでは画面遷移しないよう制御する必要があると
思います。

なお、presentModalViewControllerは、iOS6から廃止された
メソッドです。iOS6以降をターゲットにするなら、
presentViewControllerを使うべきだと思います。
(presentModalViewControllerを使っても、一応画面遷移しました。)

ただ普通は、xcode5を使うならiOS7用のSDKを使うことになり、
presentModalViewControllerを書くだけでwarningが出ると思うのですが、
もしかしてiOS5用のSDKとかを特別に設定して使っているんでしょうか?

私が確認したのは、BaseSDK、deplayment targetともiOS7です。
全くの新規プロジェクトに質問のコードを書いて、画面遷移できる
ことを確認できたら、そこから本来のプロジェクトに少しづつ合わせ
ていけば、画面が遷移しなくなる原因がつかめると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
原因が画面遷移にあると思い込んでいましたので、回答内容が参考になりました。
質問内容のコードと照らし合わせて原因を調べてみたところ、実際の原因は画面遷移のコードとは別のところにありました。
(画面遷移の参照元のユーザーデフォルトの数値がアクティブになるたびにリセットされていたようです(汗))
おかげさまで解決することができました。

お礼日時:2014/01/01 21:44

1 まず、ViewControllerのインスタンスが、activeなVCであるという仮定ができるのでしょうか?


2 以下の部分を変更する
---------------------------------
ViewController.m
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:@"applicationDidBecomeActive"
object:nil];
}
------------------------------------
ViewController.m
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive:)
name:@"applicationDidBecomeActive"
object:nil];
}

3 本当に、ViewControllerのapplicationDidBecomeActive がよばれているのか、ブレークポイントで確認

 くらいでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
アドバイスを元に、問題を解決することができました。

お礼日時:2014/01/01 21:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!