从didReceiveRemoteNotification打开视图

时间:2013-02-28 15:47:13

标签: iphone ios objective-c xcode

我问了几次这个问题,我尝试了几种不同的方法,但没有成功。

我尝试过的最新方法如​​下: 我包含了我想要显示的ViewController。然后我将此代码放在didReceiveRemoteNotification方法中。

    CarFinderViewController *pvc = [[CarFinderViewController alloc] init];
   // [self.window.rootViewController presentViewController:pvc animated:YES completion:nil];
    [(UINavigationController *)self.window.rootViewController pushViewController:pvc animated:NO];

这不起作用。我认为我可能遇到的问题是我的初始视图不像许多示例所示的导航控制器。

enter image description here

这是我的故事板的图片>我想发送给用户的VC是汽车查找器(右下角)

有人可以向我解释我可能做错了什么吗?

2 个答案:

答案 0 :(得分:5)

当您收到远程通知时,您可以使用基本上postNotification 例如,您的didReceiveRemoteNotification发布通知中的此类

[[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotification" object:nil userInfo:userInfo];

现在在你的FirstViewController中你可以像这样注册FirstViewController这个通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushNotificationReceived) name:@"pushNotification" object:nil];

并在您的方法中

-(void)pushNotificationReceived{

CarFinderViewController *pvc = [[CarFinderViewController alloc] init];
[self presentViewController:pvc animated:YES completion:nil];

}

不要忘记在dealloc方法

中删除观察者的通知
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

答案 1 :(得分:2)

我认为最简单的解决方案是将CarFinderViewController显示为模态视图,而不是试图将其推送到当时可能或可能不可见的导航控制器。

避免进一步不一致的另一个要点我建议您从故事板中实例化CarFinderViewController,而不是直接通过类方法。

类似的东西:

UIViewController * vc = self.window.rootViewController;
// You need to set the identifier from the Interface
// Builder for the following line to work
CarFinderViewController *pvc = [vc.storyboard instantiateViewControllerWithIdentifier:@"CarFinderViewController"];
[vc presentViewController:pvc animated:YES completion:nil];