2017-09-13 4 views
1

私は終了したアプリにプッシュ通知を送信しています。このメソッドだけが起動されたようです。私は、アプリケーションがプッシュ通知で起動されたときにViewControllerを開きたいですが、何もしないだけでアプリケーションを開きます。didFinishLaunchingWithOptionsからViewControllerを開く

私はこのコードであることを達成しようとした:

if (launchOptions != nil) { 

      NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
      NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; 
      if (apsInfo) 
      { 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"openNews" object:nil userInfo:userInfo]; 
      } 


} 

と同様にこれを試してみました。..

if (launchOptions != nil) { 

      NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
      if (userInfo != nil) 
      { 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"openNews" object:nil userInfo:userInfo]; 
      } 
} 

任意のアイデアをアプリはプッシュ通知で終了したときのViewControllerを起動する方法? !

は、だから私はlaunchOptions = nilのちょうどImがトリガされた通知情報とコードの一部を受け取るかどうかを確認する場合はNSUserDefaultsへの通知情報を保存しようとした、それはあるが、何らかの理由でこの部分が動作していません。

[[NSNotificationCenter defaultCenter] postNotificationName:@"openNews" object:nil userInfo:userInfo]; 

が、イムは、同じ方法を使って、どこでも、それはあなたがまだそれをキャッチするために誰に通知を掲載しているので、動作しません罰金

答えて

3

動作します。

ええと、ここでできることは、指定したlaunchOptionsを受け取ったときにアプリケーションの最初のViewControllerを設定することです。

あなたはこれを使用して設定することができます。

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryboard" bundle:nil]; 
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardId"]; 

self.window.rootViewController = viewController; 
[self.window makeKeyAndVisible]; 

はあなたのナビゲーションを設計する際にかかわらず、注意してください。特に、最初のViewControllerを、ナビゲーションスタックにアクセスする戻るボタンを持つページにしたい場合。

popViewControllerを試行すると初期ビューコントローラになるので、ポップは何も表示されません。

EDIT:方法:

あなたはそれが遅延してMainVCから開くことがしたい場合は、あなたがあなたのMainVC

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(openAnotherVC:) 
name:@"YourPostNotificationName" object:nil]; 

にtnisを置くことができる。次にopenAnotherVCでご希望のVCに移動します

+0

私はちょうど遅れてViewControllerを開く通知を投稿できますか?例えば1秒遅れ? – kosas

+0

ええええええ、あなたは、あなたのMainViewControllerにあなたのpostNotificationのハンドラを置いてそこからVCを開くことができます。 –

+0

私は私の答えを編集しました。それでも動作しない場合は教えてください –

関連する問題