1

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

例如,我安排 UILocalNotification 在星期一下午 5 点取出垃圾,没有重复间隔。它开火没有问题,而且准时。周二,我有一个 UILocalNotification 可以在周二下午 5 点将垃圾箱带入,同样没有重复间隔。当那个触发时,我会看到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 回答
0

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

localNotification.repeatInterval = NSWeekCalendarUnit;

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

localNotification.repeatInterval = NSWeekdayCalendarUnit;

每天重复一次。

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

于 2013-07-29T18:08:16.490 回答