2

アプリのローカル通知が 2 回発火 (表示) されることがあります。私はシミュレーターではなく、実際のデバイスを使用しています。再現ステップを取得しようとしてきましたが、できませんでした。ブレークポイント/nslog を使用してプロセスを実行するたびに、常に 1 つの通知がスケジュールされます。これにより、表示/起動される通知は1つだけになると思います。ただし、通知が 2 つ届く場合があります。インターネットで回答を検索しましたが、多くの情報を得ることができませんでした。ここで同じことを経験した人はいますか?どうやって問題を解決できましたか?

- (void)scheduleAllNotifications
{
    if (_isEnabled && [[NSUserDefaults standardUserDefaults] boolForKey:NotificationsUserDefaultsKey]) {
        [self updateFireDates];
        for (NSDate *fireDate in fireDates) {
            UILocalNotification *notification = [[UILocalNotification alloc] init];
            notification.fireDate = fireDate;
            notification.alertBody = @"Message";
            notification.alertAction = @"View";
            notification.soundName = @"notificationsound.mp3";
            [notifications addObject:notification];

            [[UIApplication sharedApplication]scheduleLocalNotification:notification];
        }
    }
}



- (void)cancelAllNotifications
{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    [notifications removeAllObjects];

}

- (void)updateFireDates
{
    [fireDates removeAllObjects];
    NSDate *now = [NSDate date];
    NSDate *fireDate = [NSDate dateWithTimeInterval:THREEDAYS sinceDate:now];
    if (fireDate){[fireDates addObject:fireDate];}
}

アプリがアクティブになるたびに cancelAllNotifications が呼び出されます アプリがアクティブに辞退するたびに shceduleAllNotifications が呼び出されます

4

2 に答える 2

4

Bart Doe の言うとおりです。これらは以前のテスト実行からの迷子の通知です。

この問題を解決するには、[[UIApplication sharedApplication] cancelAllLocalNotifications];- (void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsで AppDelegate を呼び出して、以前にスケジュールされたすべての通知を消去します。

于 2015-09-03T22:21:31.437 に答える
2

プロジェクトのビルド/デバッグ フェーズにいるように見えるので、これらの二重通知が実際に古いものであっても驚かないでしょう。実際に開発/テスト中に自分で間違った通知を作成したときに、デバイスが奇妙で迷子の通知を作成したと思ったことがありました。

できることは、追加のデバッグ情報を userInfo フィールドに入れることです。そこにビルド番号や作成日時などを入れることができます。次に、通知が発生するたびにこれらをログに記録します。

ただし、実際にバグに遭遇した可能性があります。 ローカル通知「didReceiveLocalNotification」が 2 回呼び出されます。

于 2013-08-23T06:56:07.170 に答える