我希望我的应用程序在通过单击通知启动应用程序时执行特定操作。当应用程序已经在后台运行时,我想执行这些特定的事情,但是当应用程序通过单击通知从 SCRATCH (未运行到后台)启动时,我也想执行这些特定的操作。
通过单击通知从后台启动应用程序时,我通过以下方式收到通知:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
=> 没问题!
通过单击通知从头开始启动应用程序时,我想通过以下方式获取通知:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
}
但launchOptions 始终为零!当应用程序通过单击应用程序图标(正常)从头开始启动时,以及当应用程序通过单击通知从头开始启动时(不正常),它为零。
有人知道如何解决这个问题吗?
谢谢 !!!
编辑 1
这是我的通知的创建方式(乔问题):
NSDictionary *userInfo = [NSDictionary dictionaryWithObjects:
[NSArray arrayWithObjects:notifText,latitudeString,longitudeString,nil]
forKeys:[NSArray arrayWithObjects:@"notifText",@"latitude",@"longitude", nil]];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody =msg;
localNotif.alertAction = @"Ok";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
localNotif.userInfo = userInfo;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
编辑2(回答我的问题!:))
这是我用来调试我的应用程序的过程,但是......这个过程是错误的!
- 我使用“编辑方案”菜单中的“等待 MyApp.app 启动”选项设置调试器
- 我第一次使用 XCode 启动了我的应用程序(从头开始启动)XCode 显示“等待我的 MyApp 启动”=> 我点击了我的应用程序图标以启动应用程序
- 应用程序启动 => 我点击了主页按钮 => 显示通知
- 我点击了 XCode 中的停止按钮以关闭应用程序我用 XCode 重新启动它 => XCode 再次显示“等待我的 MyApp 启动”消息 => 我点击状态栏中的通知以启动应用程序
- => launchOptions 为零!
launchOptions 等于 nil 是因为使用 XCode 重新启动应用程序(在这种情况下使用“等待我的 MyApp 启动”选项)会删除通知,即使它仍然显示在状态栏中...
为了能够通过单击通知从头开始重新启动应用程序后调试检查 launchOptions 的内容,似乎唯一的方法是在 UIAlert 中显示此内容,如 Tammo Freese 的回答中所述。因此,在这种特定情况下使用以下命令进行调试:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"options" message:[launchOptions[UIApplicationLaunchOptionsLocalNotificationKey] description] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
return YES;
}
感谢你的帮助 !!!!