2012-11-16 13 views
7

私はストーリーボードを使用しています。ユーザーがリモートプッシュ通知を受け取ったとき、アプリがバックグラウンドであっても開いていても常に同じビューを開きます。私が提示する必要があるビューは、ストーリーボードに初期ビューコントローラを設定した後の4つのビューです。私はこの記事読み:リモートプッシュ通知を受け取ったときにビューコントロールを開きます。

How can I show a modal view in response to a notification as a new window? (no parent vc)

Open a specific tab/view when user receives a push notification

をだからここに私のコードです:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 

    UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
    notificacionViewController *menu = [navController.storyboard instantiateViewControllerWithIdentifier:@"notificacion"]; 

    // First item in array is bottom of stack, last item is top. 
    navController.viewControllers = [NSArray arrayWithObjects:menu,nil]; 

    [self.window makeKeyAndVisible]; 


} 

しかし、私はこのエラーを通知、アプリがクラッシュを受信したとき:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[locationViewController setViewControllers:]: unrecognized selector sent to instance 0x42ccd0' 

locationViewControllerはビューコントロールですストーリーボードの最初のものとして設定されています。

多くのありがとうございます。

+1

と仮定、「HomeViewControllerは」ストーリーボードの最初のビューコントローラで、ボタンをクリックした後、あなたの特別な場合のためにあなたがすべきとして

4.-プッシュを適応しなければなりませんあなたはpushメソッドで "SecondViewController"にいます。今、プッシュ通知を取得しています。あなたは "NotificationViewController"を押したり、それをモーダルにしたいですか? –

+0

私はあなたの説明を理解していないので、私はnotificacionViewControllerを得るまでスタックをプッシュすることを提案しますか?ありがとう – theomen

答えて

19

次のコードを試してみてください:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
    NotificationViewController *notificationViewController = [[NotificationViewController alloc] init]; 
    [navController.visibleViewController.navigationController pushViewController:notificationViewController];  
} 
+0

多くのありがとう。それは私にこのエラーを与えます: 'UINavigationController'のための表示可能な@interfaceはセレクタ 'pushViewController:' for line [navController.visibleViewController.navigationController pushViewController:notificationViewController]を宣言しません。 – theomen

+2

これを試してください。 [navController.visibleViewController.navigationController pushViewController:notificationViewController animated:YES]; –

2

私のコードは、私が見てきた答えから少し異なります。実際には、私の仕事をするコードは次のとおりです。

UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 

    IniciarSliderViewController *controller = (IniciarSliderViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MenuSlider"]; 

    [navigationController pushViewController:controller animated:YES]; 

1. -instructioniate de navigationController。ほとんどの場合、rootviewcontrollerが大部分のケースに含まれますが、すべてではありません。

2.ストーリーボードをインスタンス化します。 UsuarllyがMainStoryboardというタグ付き

3.特定のView Controllerをインスタンス化します。あなたは今、あなたが設定したので、あなたが必要とするすべて

+1

アプリが起動していて、ユーザーがアプリの中にいる場合、どうすればいいですか? – Andy