通知をクリックしてアプリを起動したときに、アプリに特定のことをさせたい。アプリがすでにバックグラウンドで実行されているときに、これらの特定のことを実行したいのですが、通知をクリックしてアプリが最初から開始されたとき (バックグラウンドで実行されていないとき) も実行します。
通知をクリックしてアプリをバックグラウンドから起動すると、次の方法で通知を受け取ります。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
=> 問題ありません。
通知をクリックしてアプリを最初から起動すると、次の方法で通知を取得したいと思います。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
}
しかし、launchOptions は常に nil です !! アプリ アイコンをクリックして最初からアプリを起動した場合 (通常) は nil ですが、通知をクリックして最初からアプリを起動した場合 (通常ではありません) も同様です。
誰でもこの問題を解決する方法を知っていますか?
ありがとう !!!
編集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 は nil です!
launchOptions が nil に等しいのは、XCode (この場合は「MyApp の起動を待機中」オプションを使用) を使用してアプリを再起動すると、ステータス バーにまだ表示されている場合でも通知が削除されるためです...
通知をクリックしてアプリを最初から再起動した後、launchOptions の内容をデバッグ チェックできるようにするには、Tammo Freese の回答で述べたように、この内容を UIAlert に表示するしかないようです。したがって、この特定のケースでデバッグするには、次を使用します。
- (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;
}
助けてくれてありがとう!!!!