2012-11-16 91 views
7

我正在使用故事板,並且當用戶收到遠程推送通知時,即使應用程序處於後臺或打開狀態,我也想始終打開相同的視圖。我需要展示的視圖是在故事板中設置的初始視圖控制器之後的四個視圖。我看了這個帖子:打開視圖控制器接收遠程推送通知時

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是視圖控件ller在故事板中設置爲初始。

非常感謝。

+1

假設,「HomeViewController」是在故事板的初始視圖控制器,並點擊一個按鈕,現在經過你是通過push方法在「SecondViewController」中的。現在,您正在收到推送通知。你想推「NotificationViewController」還是以模態方式呈現? –

+0

Modally,所以我不確定理解你的解釋,你建議推棧,直到我得到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爲行[navController.visibleViewController.navigationController pushViewController:notificationViewController]聲明選擇器'pushViewController:'; – 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.-實例化navigationController。通常在絕大多數情況下是rootview控制器,但不是全部

2.-實例化故事板。通常標記爲MainStoryboard

3.-實例化您的特定視圖控制器。你必須適應你的特殊情況

4 .-推,你應該做的,因爲你已經設定所有你需要

+1

如果應用程序啓動並正在運行,並且用戶在應用程序內部深處,您將如何做? – Andy

相關問題