iPhone版本 - 5.1(9B176)
以下是本地通知中的一系列事件,其中未调用didFinishLaunchingWithOptions
方法。
根据Apple documentation预期:
作为呈现通知的结果,用户点击警报的操作按钮或点击(或点击)应用程序图标。 如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的
didFinishLaunchingWithOptions
方法(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。如果在运行iOS的设备上点按应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息
实际:
didFinishLaunchingWithOptions
未调用。但是调用了applicationWillEnterForeground
和applicationDidBecomeActive
。
答案 0 :(得分:23)
你是对的。该行为与文档不一致。将文档放在一边,重点关注实际行为;问题的症结似乎是这样:如果用户通过与通知交互而变为活动状态,您将收到指向通知的指针,如果用户直接点击您的应用程序图标则不会。
举例说明。如果您提出警报样式通知,并且用户点击操作按钮,或者如果您在案例中显示横幅通知并且用户点击该通知,您将通过以下两种方式之一接收指向通知的指针:
如果您的应用程序处于未运行状态:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
UILocalNotification *launchNote = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (launchNote){
// I recieved a notification while not running
}
}
如果您的应用程序在任何状态下运行:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
// I recieved a notification
}
如果用户选择取消警报样式通知,则该通知将消失。
真正恼人的不一致的部分是,如果您提出横幅通知并且用户点击您的图标,您似乎无法在通知中心检索对所呈现的通知的引用。即它们没有出现在[[UIApplication sharedApplication] scheduledLocalNotifications]
数组中,大概是因为它们不再被安排但现在已经出现了。
总之;文档错了。还有其他烦人的不一致。如果这种行为对您来说是一个问题,那么您应该向Apple提交一个错误。