在UIApplicationDelegate
我们有类似的方法:
- (void)applicationWillEnterForeground:(UIApplication *)application
和
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
几乎每次applicationWillEnterForeground
首先调用,但我发现有时didReceiveLocalNotification
首先调用,但很少。我试图找到一些关于此的解释,但没有任何结果。在https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/iphoneappprogrammingguide.pdf我没有找到此信息
我在iOS 8 beta和iOS 7.1中遇到的这种现象在不同设备中。也许有人知道为什么或者可能有文档链接描述了这种调用appdelegate方法的奇怪现象
答案 0 :(得分:0)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
每次收到本地通知时都会被调用并且应用程序被打开(在后台或前台),而
- (void)applicationWillEnterForeground:(UIApplication *)application
仅当应用程序即将成为前台应用程序时才会调用。这两种方法并不直接相关,因为如果您的应用程序已打开且位于前台,则applicationWillEnterForeground
已被调用,并且每次收到新通知时都会调用didReceiveLocalNotification
,如果应用程序已打开但在后台仅调用didReceiveLocalNotification
,除非用户在收到应用程序后打开应用程序(因此也会调用applicationWillEnterForeground
)。如果应用程序根本没有打开且应用程序收到推送通知,那么如果用户通过与通知交互打开应用程序,则不会调用任何方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
将使用UIApplicationLaunchOptionsRemoteNotificationKey
字典中设置的密钥launchOptions
来调用。
一般来说,你不应该期望一个人在另一个之前被调用,因为这两个方法并不是严格相关的,也许你想通过其他方式实现。如果是这种情况,您应该根据目标扩展答案,以获得有关如何执行此操作的建议。