Objective c UIViewcontroller未从通知中推送

Objective c UIViewcontroller未从通知中推送,objective-c,push-notification,Objective C,Push Notification,我的故事板中有一个视图层次结构,如下所示 RootController(UIViewController) | | MainNavigationController(UINavigationController) | | | | | | |

我的故事板中有一个视图层次结构,如下所示

RootController(UIViewController)
            |
            |
MainNavigationController(UINavigationController)
            |            |                |                     |
            |            |                |                     | 
LoginController   SignInController     MainPageController    DetailControl
如果用户已经登录到“MainPageController”中,则推送“MainPageController”,如果没有,则将“SIGNController”推送到导航堆栈中。在“MainPageController”中,将根据用户选择推送“DetailControl”

现在,当出现推送通知时,我正在尝试这样做。应用程序位于后台,“MainPageController”位于导航堆栈的顶部。通知点击应该推动“DetailControl”,为了实现这一点,我把它作为我的代码

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    if(application.applicationState == UIApplicationStateActive) {

        NSLog(@"Application Active");

    } else if(application.applicationState == UIApplicationStateBackground){

        NSLog(@"Application Background");

    } else if(application.applicationState == UIApplicationStateInactive){

        [self handleNotificationWithEntity:[[userInfo objectForKey:@"aps"] objectForKey:@"entity"] withEntityId:[[userInfo objectForKey:@"aps"] objectForKey:@"entityid"]];

    } 
}


-(void) handleNotificationWithEntity:(NSString *) entity withEntityId:(NSString *) entityid
{

    RootController *rootController = (RootController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];
    MainNavigationController *mvc = (MainNavigationController *)[rootController rootNavController];
    [mvc popToRootViewControllerAnimated:true];
    NSLog(@"%@",mvc.topViewController);
    // code to push detail controller here [mvc pushviewcontroller]

}
“Detailviewcontroller”没有被推到堆栈中,并且还有行“NSLog(@“%@”,mvc.topViewController);“打印”LoginController“,而我希望应该打印“MainPageController”


谢谢

从您的图表来看,LoginVC是ViewController阵列中的第一个。这使它成为导航控制器的“根”。代码执行poptroot,然后打印出顶部。所以我希望登录控制器被记录。@dan谢谢。即使没有PoptRoot,我也会打印LoginController,但UI会清楚地显示主控制器视图。这意味着您正在检查的MainNavigationController实例与已显示的实例不同。遵循另一个方向的指针:在LoginController中,让我们查看
NSLog(@“self=%@,nav=%@”,self,self.navigationController)
。注意指针的值。在发布的代码中,
NSLog(@“mvc=%@,vcs=%@”,mvc,mvc.viewController)
。我猜你会看到指针不匹配。