Ios 从AppDelegate推送视图控制器

Ios 从AppDelegate推送视图控制器,ios,apple-push-notifications,appdelegate,Ios,Apple Push Notifications,Appdelegate,我刚刚开始学习如何使用iOS和Parse实现推送通知。 目前,我可以从解析仪表板向应用程序发送推送通知,并收到通知,正如我在Xcode控制台中看到的,但现在我的问题是我无法从AppDelegate打开视图控制器 这是我的代码: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(

我刚刚开始学习如何使用iOS和Parse实现推送通知。 目前,我可以从解析仪表板向应用程序发送推送通知,并收到通知,正如我在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)
,收到通知,但未显示视图控制器,显示任何警告或错误


欢迎提供任何帮助。

您不应创建新的NavigationController,而应使用现有的导航控制器。通常是键窗口的rootViewController属性

试试这个:

UINavigationController *controlador = self.window.rootViewController;
如果要在SWRevealViewController中显示您的targetViewController,您可以更改代码如下:

SWRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador pushFrontViewController:targetViewController animated:YES];
如果需要在SWRevealViewController上显示targetViewController,请使用以下方法:

WRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador presentViewController:targetViewController
                 animated:YES
               completion:nil];
self.window.rootviewController=targetViewController;
如果需要,只需使用targetViewController替换SWRevealViewController即可:

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

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

您不应该创建新的NavigationController,而应该使用一个现有的。通常是键窗口的rootViewController属性

试试这个:

UINavigationController *controlador = self.window.rootViewController;
如果要在SWRevealViewController中显示您的targetViewController,您可以更改代码如下:

SWRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador pushFrontViewController:targetViewController animated:YES];
如果需要在SWRevealViewController上显示targetViewController,请使用以下方法:

WRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador presentViewController:targetViewController
                 animated:YES
               completion:nil];
self.window.rootviewController=targetViewController;
如果需要,只需使用targetViewController替换SWRevealViewController即可:

WRevealViewController *controlador = (SWRevealViewController)self.window.rootViewController;
[controloador presentViewController:targetViewController
                 animated:YES
               completion:nil];
self.window.rootviewController=targetViewController;
但别忘了将您的SWRevealViewController保存在另一个属性中。

试试这段代码

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];
可能会对您有所帮助。

请尝试此代码

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];
可能会对你有帮助。

试试这个

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];
试试这个

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];
试试这个:

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

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

[self.window makeKeyAndVisible];
试试这个:

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

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

[self.window makeKeyAndVisible];

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

 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结构。
谢谢大家的建议。

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

 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结构。


感谢大家的建议。

如果要将视图控制器从appDelegate推入导航堆栈,则需要将rootView控制器转换为UINavigation控制器。

如果要将视图控制器从appDelegate推入导航堆栈,则需要将rootView控制器转换为UINavigation控制器控制器

谢谢,我正在使用SWRevealViewController,使用您的建议时出现错误:Slider1ViewController pushViewController:animated::发送到实例的未识别选择器我已回答了我自己的问题。感谢您在任何情况下提供的帮助。谢谢,我正在使用SWRevealViewController,使用您的建议时会引发一个错误:Slider1ViewController pushViewController:animated::未识别的选择器发送到instanceI我已经回答了我自己的问题。感谢您在任何情况下的帮助。谢谢,您的答案与VChemezov相同,将引发异常“:Slider1ViewController按钮viewController:animated::无法识别的选择器发送到instanceIs Slider1ViewController a viewController或UINavigationControllerI已回答了我自己的问题。感谢您在任何情况下的帮助。谢谢,您的答案与VChemezov相同,将引发异常“:Slider1ViewController按钮viewController:animated::无法识别的选择器发送到instanceIs Slider1ViewController a viewController或UINavigationControllerI已回答了我自己的问题。谢谢你在任何情况下的帮助。你的代码看起来不错,除了一件事。您从未设置rootviewcontroller。如果要创建导航控制器,请将其设置为根视图控制器,或在情节提要中使用一个,并将其设置为根视图控制器。@MaheshAgrawal,谢谢。但是设置rootviewcontroller会引发异常。然后,您可以在情节提要中添加导航控制器并将其设置为根视图controller@MaheshAgrawal,但应用程序的其余部分可能会更改,或者不会更改?这取决于您的应用程序流。您说过您正在使用SWRevealViewController。当你想导航到其他控制器时,我不知道你的应用程序流程,但如果你要推任何控制器,那么你必须需要导航控制器。除了一件事之外,你的代码似乎还可以。您从未设置rootviewcontroller。如果要创建导航控制器,请将其设置为根视图控制器,或在情节提要中使用一个,并将其设置为根视图控制器。@MaheshAgrawal,谢谢。但是设置rootviewcontroller会引发异常。然后,您可以在情节提要中添加导航控制器并将其设置为根视图controller@MaheshAgrawal,但应用程序的其余部分可能会更改,或者不会更改?这取决于您的应用程序流。您说过您正在使用SWRevealViewController。当你想导航到其他控制器时,我不知道你的应用程序流程,但如果你要推任何控制器,那么你必须需要导航控制器。谢谢,但我不想打开Slider1ViewController,我想打开Aceptado(另一个视图控制器),然后更换viewcontroller。我已经回答了我自己的问题。感谢您在任何情况下的帮助。谢谢,但我不想打开Slider1ViewController,我想打开Aceptado(另一个视图控制器),然后更换viewcontroller。我已经回答了自己的问题。无论如何谢谢你的帮助。我已经回答了我自己的问题。无论如何谢谢你的帮助。我已经回答了我自己的问题。谢谢你在任何情况下的帮助。欢迎来到SO。如果你能用代码解释更多,那会很有帮助。self.window!。rootViewController=UINavigationController(yourRootVC)欢迎使用SO。如果你能用代码解释更多,那会很有帮助。self.window!。rootViewController=UINavigationController(yo