Ios 从AppDelegate推送视图控制器
我刚刚开始学习如何使用iOS和Parse实现推送通知。 目前,我可以从解析仪表板向应用程序发送推送通知,并收到通知,正如我在Xcode控制台中看到的,但现在我的问题是我无法从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 (^)(
- (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