【问题标题】:Old Local Notifications Firing on iOS在 iOS 上触发旧的本地通知
【发布时间】:2013-07-29 18:00:46
【问题描述】:

我正在安排一组 UILocalNotifications。他们准时开火,似乎工作正常。但是,有时,当触发 NEW 通知时,会同时触发多个(有时只有一个)OLD 通知。

例如,我安排 UILocalNotification 在星期一下午 5 点取出垃圾,没有重复间隔。它开火没有问题,而且准时。周二,我有一个 UILocalNotification 可以在周二下午 5 点将垃圾箱带入,同样没有重复间隔。当那个触发时,我会看到 NOW 的正确通知,但在当前通知下方还会显示另一个通知,用于 1 天前。我没有重新安排此通知。好像是昨天的通知。

这很奇怪,我无法在任何一致的基础上重现它。我认为可能以某种方式添加了一些旧通知,所以我添加了一些逻辑来运行所有计划的通知并删除任何具有过去的触发日期但没有帮助的通知。其他人见过这个问题吗?是否有一些手动清除我需要在触发时执行的通知?

编辑:添加了一些调度代码

//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];
}

【问题讨论】:

  • 请显示您如何创建本地通知的代码。源码可以提供线索。
  • @BlackFrog 添加了代码

标签: ios objective-c uilocalnotification


【解决方案1】:

我们遇到了同样的问题,但设法通过批量调用 API 来解决它。而不是每次都调用 scheduleLocalNotification ,而是构建一个包含您想要安排的所有通知的数组。像这样:

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

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

[[[UIApplication sharedApplication] setScheduledLocalNotifications:notifications];

还要确保从主线程调用它。

这样做后,我们的问题似乎已经消失了。

【讨论】:

    【解决方案2】:

    我能想到的第一件事是检查通知的repeatInterval。似乎您可能希望您的 repeatInterval 是每周一次,但间隔似乎设置为每天。要将 repeatInterval 设置为每周使用:

    localNotification.repeatInterval = NSWeekCalendarUnit;
    

    也许在某些地方你可能会不小心使用

    localNotification.repeatInterval = NSWeekdayCalendarUnit;
    

    每天重复一次。

    如果这不是问题,那么也许如果您在安排通知的地方发布一些代码,有人可以帮助您。如果通知的重复间隔为 0(或不重复),则您不必手动清除它。如果重复间隔不为 0,则您必须手动清除它以使其停止重复。

    【讨论】:

    • 我实际上没有设置重复间隔。我使用的示例只是一个示例,它不一定是我的用例。我所有的通知都不应该有任何重复间隔。我相信默认是不重复正确吗?
    • 是的,没错。这个问题似乎与安排通知的方式有关。也许您可以发布一些调度代码?
    猜你喜欢
    • 2015-03-08
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多