1

スケジュールしている UILocalNotifications のセットがあります。彼らは時間通りに発砲しており、うまく機能しているようです。ただし、場合によっては、NEW通知が発生したときに、複数の (場合によっては 1 つだけ) OLD通知が同時に発生することがあります。

たとえば、月曜日の午後 5 時にゴミを出すように UILocalNotification をスケジュールし、繰り返しの間隔はありません。問題なく、時間通りに発火します。火曜日には、火曜日の午後 5 時にごみ箱を持ち込む UILocalNotification があります。繰り返し間隔はありません。それが起動すると、 NOWの正しい通知が表示されますが、現在の通知の下にも1 Day Agoのゴミ箱を取り出す別の通知が表示されます。この通知の再スケジュールは行っていません。昨日のお知らせのようです。

それは非常に奇妙で、一貫した方法で再現することはできません。どういうわけか古い通知が追加されているのではないかと考えたので、スケジュールされたすべての通知を実行し、過去の発火日を持つものを削除するロジックを追加しましたが、それは役に立ちませんでした。他の誰かがこの問題を見たことがありますか? 通知が発生したときに手動でクリアする必要がありますか?

編集:スケジューリングコードの一部を追加

//only schedule if the alert date is later than now
if ([AMDateUtil isNowEarlierThanDate:alertDate]) {
    //create the notification and setup some properties
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    localNotification.fireDate = alertDate;
    localNotification.timeZone = [NSTimeZone defaultTimeZone];

    localNotification.alertAction = nil;
    localNotification.soundName = UILocalNotificationDefaultSoundName;

    //add the local notification
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
4

2 に答える 2

1

同じ問題がありましたが、API への呼び出しをバッチ処理することで問題を解決できました。毎回 scheduleLocalNotification を呼び出す代わりに、スケジュールするすべての通知の配列を作成します。このような:

NSMutableArray *notifications = [[[UIApplication sharedApplication] scheduledLocalNotifications] mutableCopy];

// add notifications to the mutable array
// same goes for removing notifications

[[[UIApplication sharedApplication] setScheduledLocalNotifications:notifications];

また、メインスレッドから呼び出していることを確認してください。

これを行った後、私たちの問題は解消されたようです。

于 2014-05-05T20:33:28.783 に答える