在特定时间取消所有通知

时间:2012-12-08 10:08:23

标签: iphone objective-c ios uilocalnotification nsdatecomponents

对于我的应用程序,我不希望通知在周末发生。 所以我的想法是在星期五的特定时间取消所有通知,我想通过安排任务来做到这一点,就像我安排通知(UILocalNotifications

例如,我有我的警报代码:

NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setHour:8];
    [comps setMinute:25];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *fireDate = [gregorian dateFromComponents:comps];

    UILocalNotification *alarm = [[UILocalNotification alloc] init];

    alarm.fireDate = fireDate;
    alarm.repeatInterval = NSDayCalendarUnit;
    alarm.soundName = @"sound.aiff";
    alarm.alertBody = @"Message..";
    alarm.timeZone = [NSTimeZone defaultTimeZone];
    [[UIApplication sharedApplication] scheduleLocalNotification:alarm];

有没有办法用相同的方法取消所有通知,还是Apple不允许这样做?

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式取消本地通知:

[[UIApplication sharedApplication] cancelLocalNotification:notification];

您需要循环浏览所有本地通知并在周末取消它们。通过它们循环:

NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
[notifications enumerateObjectsUsingBlock:^(UILocalNotification *notification, NSUInteger idx, BOOL *stop){
    if (/* notification.fireDate is on weekend */) {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
    }
}];

但是,您必须确保应用程序在星期五运行才能执行代码以删除周末通知。

但是,为什么不安排那些周末出现的人呢?

答案 1 :(得分:0)

您可以使用

方法取消所有本地通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];

如果您想浏览它们,并发布最重要的通知,可以使用scheduledLocalNotifications