当iPhone应用程序在后台运行时,它会收到远程通知。所以它会执行didReceiveRemoteNotification
回调。在那,我将推动一个新的UIViewController
。但在此之前,它注意到它调用了applicationWillEnterForeground
回调。
在那里我也使用模态对话框进行一些位置更新。因此,当此通知到达时,这两种情况都会发生,并且应用程序正在崩溃。那么有什么方法可以阻止applictiaonWillEnterBackground
处理远程通知。由于时刻有点困难,因此此处理在applicationWillEnterBackground
控制器之后完成。
谢谢。
答案 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
。