从AppDelegate推送视图控制器

问题描述 投票:1回答:6

我刚刚开始学习如何用iOS和Parsse实现推送通知,目前,我可以从Parsse仪表板向应用程序发送推送通知,通知被接收,我可以在Xcode控制台看到,但现在我的问题是,我无法从AppDelegate打开一个视图控制器。

这是我的代码。

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler {
    // Create empty photo object
    NSString *photoId = [userInfo objectForKey:@"p"];
    NSLog(@"P=%@",photoId);


    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    Aceptado *targetViewController = (Aceptado*)[mainStoryboard instantiateViewControllerWithIdentifier:@"servicio_aceptado"];
    UINavigationController *controlador = [[UINavigationController alloc]init];
    [controlador pushViewController:targetViewController animated:YES];

    }

就像我说的,控制台显示的是日志 NSLog(@"P=%@",photoId) ,通知收到了,但是视图控制器没有显示,显示任何警告或错误。

欢迎任何帮助。

ios apple-push-notifications appdelegate
6个回答
5
投票

我已经解决了这样的问题。

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

    Aceptado *controller = (Aceptado*)[mainStoryboard
                                                       instantiateViewControllerWithIdentifier: @"servicio_aceptado"];
        controller.id_not =_id_not;
        controller.idemployee = _idemployee;
        controller.fullname = _fullname;
        controller.phone = _phone;
        controller.photo = _photo;
        controller.dni = _dni;
        controller.licenseplate = _licenseplate;
        controller.model = _model;
        controller.color = _color;
        controller.latitude = _latitude;
        controller.longitude = _longitude;

    self.window.rootViewController = controller;

现在,我可以从AppDelegate文件中向目标视图控制器传递值,并保留SWRevealViewController结构。 感谢大家的建议。


0
投票

试试这段代码。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
Aceptado *targetViewController = (Aceptado*)[mainStoryboard instantiateViewControllerWithIdentifier:@"servicio_aceptado"];

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

[navVc pushViewController: targetViewController animated:YES];

可能对你有帮助。


0
投票

试试这个一次。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
Slider1ViewController *viewcontroller = [storyBoard instantiateViewControllerWithIdentifier:@"Slider1ViewController"];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewcontroller];
[navController setViewControllers: @[viewcontroller] animated: YES];

[self.revealViewController setFrontViewController:navController];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];

0
投票

你不应该创建新的NavigationController,而是使用现有的一个。通常情况下,它是 rootViewController 属性的关键窗口。

试试这个。

UINavigationController *controlador = self.window.rootViewController;

如果你想显示你的 targetViewController 在SWRevealViewController中,你可以把你的代码改成这样。

SWRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador pushFrontViewController:targetViewController animated:YES];

如果你需要显示 targetViewController 在SWRevealViewController上,使用这个。

WRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador presentViewController:targetViewController
                 animated:YES
               completion:nil];

如果你需要的话,只需用 targetViewController 使用这个。

self.window.rootviewController=targetViewController;

但别忘了把你的SWRevealViewController保存在另一个属性中。


0
投票

试试这个。

SomePageViewController *someVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SomeVC"];

self.navController = [[UINavigationController alloc] initWithRootViewController:someVC];
self.window.rootViewController = self.navController;

[self.window makeKeyAndVisible];

0
投票

如果你想把一个视图控制器从appDelegate推送到导航堆栈中,你需要把你的rootView控制器投递给UINavigation Controller。

© www.soinside.com 2019 - 2024. All rights reserved.