2012-11-16 2 views
7

저는 storyboard를 사용하고 있으며 사용자가 원격 푸시 알림을 받으면 앱을 백그라운드에서 열거 나 열어도 항상 같은보기를 열려고합니다. 내가 제시해야하는보기는 스토리 보드에 초기보기 컨트롤러를 설정 한 후 네 개의보기입니다.원격 푸시 알림을 수신 할 때보기 컨트롤러 열기

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

내 코드입니다 :이 게시물 읽기

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

- (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]; 


} 

하지만을 나는 알림이 오류와 응용 프로그램의 충돌을받을 때

locationViewController는 뷰 컨트롤입니다. 스토리 보드의 머리 글자로 설정됩니다.

감사합니다.

+1

가정 "HomeViewController는"스토리 보드의 초기 뷰 컨트롤러, 그리고 지금, 버튼을 클릭 한 후 당신은 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는 selector [ '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. 인스턴스를 내비게이션 컨트롤러에 지정하십시오. 보통 대부분의 경우 rootviewcontroller이지만 모두는 그렇지 않습니다.

2. 스토리 보드를 인스턴스화합니다. Usuarlly는 MainStoryboard로 태그가 지정됩니다.

3. 특정보기 컨트롤러를 인스턴스화하십시오. 당신은 당신이 당신이 필요로하는 모든 설정했기 때문에 당신이해야대로 특별한 경우

4 .- 푸시에 대한 적응해야

+1

앱을 실행하고 사용자가 앱의 내부에있을 경우 어떻게합니까? – Andy

관련 문제