2017-09-13 95 views
1

我发送推送通知到终止的应用程序,似乎只有这种方法被触发。我想在应用程序启动时使用推送通知来打开ViewController,但它不会执行任何操作,只是打开应用程序。从didFinishLaunchingWithOptions打开ViewController

我试图实现与验证码:

if (launchOptions != nil) { 

      NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
      NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; 
      if (apsInfo) 
      { 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"openNews" object:nil userInfo:userInfo]; 
      } 


} 

,并试图以此为好..

if (launchOptions != nil) { 

      NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
      if (userInfo != nil) 
      { 
       [[NSNotificationCenter defaultCenter] postNotificationName:@"openNews" object:nil userInfo:userInfo]; 
      } 
} 

任何想法如何,当应用程序被终止,推送通知,推出的ViewController?

所以我一直试图挽救通知信息,以NSUserDefaults的,如果launchOptions =零只是为了检查,如果im接收通知信息和代码的一部分被触发,它是,但由于某种原因,这部分是不工作:

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

,但使用相同的方法和无处不在林和正常工作

回答

3

,因为你发布没有一个通知抓住它仍然是行不通的。

嗯,你可以在这里做的是当你的应用程序收到你指定的launchOptions的时候设置它的初始ViewController。

您可以使用此设置:

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryboard" bundle:nil]; 
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardId"]; 

self.window.rootViewController = viewController; 
[self.window makeKeyAndVisible]; 

不过要小心设计你导航。特别是如果你想让你的初始ViewController成为一个带有后退按钮的页面来访问导航堆栈。因为你会使它成为你的初始视图控制器,如果它试图popViewController,它会pop什么都不做。

编辑:

如果你想让它从MainVC打开了延迟,你可以把tnis在MainVC

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

然后导航至您想要的VC在openAnotherVC:方法

+0

我可以只发布通知以便延迟打开ViewController吗?例如1秒延迟? – kosas

+0

嗯,是的,你可以把你的postNotification处理程序放在你的MainViewController上并从那里打开VC。 –

+0

我编辑了我的答案。让我知道它是否仍然无效 –

相关问题