推送到didReceiveRemoteNotification的视图

时间:2010-11-24 12:05:38

标签: iphone cocoa-touch iphone-sdk-3.0 ios4 push-notification

当iPhone应用程序在后台运行时,它会收到远程通知。所以它会执行didReceiveRemoteNotification回调。在那,我将推动一个新的UIViewController。但在此之前,它注意到它调用了applicationWillEnterForeground回调。

在那里我也使用模态对话框进行一些位置更新。因此,当此通知到达时,这两种情况都会发生,并且应用程序正在崩溃。那么有什么方法可以阻止applictiaonWillEnterBackground处理远程通知。由于时刻有点困难,因此此处理在applicationWillEnterBackground控制器之后完成。

谢谢。

1 个答案:

答案 0 :(得分:3)

只有在应用程序在前台运行时才应调用回调application:didReceiveRemoteNotification:。在后台运行时,您应该拨打application:didFinishLaunchingWithOptions:

由于您提出问题并且还使用核心位置,因此当应用程序处于后台时可能会调用application:didReceiveRemoteNotification:,但我认为这将是一个错误。至少根据Apple的文档。

无论如何,不​​,你不能阻止applicationWillEnterForeground:。如果你不知道你在不同的回调中做了什么,我建议你在applicationWillEnterForeground:设置一个标志,如果你在那里做某事,然后在application:didReceiveRemoteNotification:

中检查那个标志
- (void)applicationWillEnterForeground:(UIApplication *)application {
  if (somehingHappend) {
    somethingHappended = YES;
  }
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  if (!somethingHappened) {
    // push your view controllers or whatever
  }
}

其中somethingHappened是与ivar在同一类中定义的BOOL