7

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

通知に応じてモーダルビューを新しいウィンドウとして表示するにはどうすればよいですか?(親VCなし)

ユーザーがプッシュ通知を受け取ったら、特定のタブ/ビューを開きます

だからここに私のコードがあります:

- (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は、ストーリーボードで初期として設定されたビューコントローラーです。

どうもありがとう。

4

2 に答える 2

19

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

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
    [navController.visibleViewController.navigationController pushViewController:notificationViewController];    
}
于 2012-11-16T13:18:11.940 に答える
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.-ナビゲーションコントローラーをインスタンス化します。通常、ほとんどの場合、rootviewcontrollerですが、すべてではありません

2.-ストーリーボードをインスタンス化します。通常、MainStoryboardとしてタグ付けされています

3.-特定のViewControllerをインスタンス化します。あなたはあなたの特別な場合に適応しなければなりません

4.-必要なものをすべて設定したので、必要に応じてプッシュします

于 2014-01-16T11:47:08.900 に答える