AppleのドキュメントによるとUILocationNotification.fireDate
:
指定された値が nil または過去の日付である場合、通知はすぐに配信されます。
過去の日付を使用している場合、この動作は見られません。それは私だけですか、それとも他の人もこれを見ていますか?
これが私のコードです:
NSMutableArray *notifications = [NSMutableArray array];
UILocalNotification* alarm = [[UILocalNotification alloc] init];
alarm.fireDate = [NSDate dateWithTimeIntervalSince1970:time(NULL)-5];
alarm.repeatInterval = 0;
alarm.soundName = @"alarm.caf";
alarm.alertBody = @"Test";
alarm.alertAction = @"Launch";
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
[userInfo setValue:[NSNumber numberWithInt:10] forKey:@"PsID"];
alarm.userInfo = userInfo;
notifications = [NSArray arrayWithObject:alarm];
UIApplication *app = [UIApplication sharedApplication];
app.scheduledLocalNotifications = notifications;
time(NULL)-5 を time(NULL)+5 に変更すると、このコードが実行されてから 5 秒後に通知が届きます。-5 の値を指定すると、通知が届きません。
ここでの良い質問には、可能な明確な答えが必要であり、これは多くの「私も」の回答の対象になる可能性があることを知っています. 、またはドキュメントが言うように機能する上記のコードの別のバージョン。
これは私のアプリケーションにとって重要です。なぜなら、アラームがその日の早い時間に発生した場合でも、アラームをユーザーに通知する必要がある場合があるからです。コードを変更して現在の時刻を確認し、常にそれより数秒後の値を与えることができると思いますが、「何秒後か」が本当に安全かどうかはわかりません。できるだけ早くそれを実現したいと思います-また、「文書化された動作」を取得するためのより良い方法がある場合は、そのハックを使用しないでください。私の実際のコードは上記と似ていますが、いくつかの通知を投稿しています。一部は過去、一部は今日、一部は明日以降の可能性があります (これはカレンダー アプリケーション用です)。