我刚刚开始学习如何用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)
,通知收到了,但是视图控制器没有显示,显示任何警告或错误。
欢迎任何帮助。
我已经解决了这样的问题。
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 *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];
你不应该创建新的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保存在另一个属性中。
试试这个。
SomePageViewController *someVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SomeVC"];
self.navController = [[UINavigationController alloc] initWithRootViewController:someVC];
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
如果你想把一个视图控制器从appDelegate推送到导航堆栈中,你需要把你的rootView控制器投递给UINavigation Controller。