1

对于我的应用程序,我不希望通知在周末关闭。所以我的想法是在星期五的特定时间取消所有通知,我想通过安排任务来做到这一点,就像我安排通知(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不允许这样做?

4

2 回答 2

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

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

但是,为什么不首先安排周末的时间呢?

于 2012-12-08T10:21:13.593 回答
0

您可以使用该方法取消所有本地通知

[[UIApplication sharedApplication] cancelAllLocalNotifications];

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

于 2012-12-08T10:19:07.693 回答