2015-05-30 2 views
1

Я повторяю локальное уведомление в одно и то же время каждый день.Проверьте, разрешены ли локальные уведомления

Сейчас все работает нормально, за исключением случаев, когда Уведомления отключены, а затем снова включены, происходит уведомление об ошибках со дня, когда оно было выключено.

Есть ли лучший способ проверить, выключен ли он, а затем обратно, и очистить все старые уведомления?

Спасибо!

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 
    UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 

    // before we create any new ones, cancel all existing notifications 
    [[UIApplication sharedApplication]cancelAllLocalNotifications]; 

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

    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *comp = [cal components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]]; 
    comp.hour = 19; // 19 = 7PM 
    comp.minute = 45; // 7:45 PM 
    comp.second = 01; // 7:45:01 PM 

    localNotification.fireDate = [cal dateFromComponents:comp]; 
    localNotification.alertBody = @"Local Notification in iOS8"; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotification.repeatInterval = NSCalendarUnitDay; 

    // this will schedule the notification to fire at the fire date 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
    // this will fire the notification right away, it will still also fire at the date we set 
    [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 
} 

ответ

1

Перед тем как представить проверку уведомлений, если пользователи настройки позволяют это:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 
    UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 

    // before we create any new ones, cancel all existing notifications 
    [[UIApplication sharedApplication]cancelAllLocalNotifications]; 

    if ([[[UIApplication sharedApplication] currentUserNotificationSettings] types] != UIUserNotificationTypeNone) { 

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

     NSCalendar *cal = [NSCalendar currentCalendar]; 
     NSDateComponents *comp = [cal components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]]; 
     comp.hour = 19; // 19 = 7PM 
     comp.minute = 45; // 7:45 PM 
     comp.second = 01; // 7:45:01 PM 

     localNotification.fireDate = [cal dateFromComponents:comp]; 
     localNotification.alertBody = @"Local Notification in iOS8"; 
     localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
     localNotification.repeatInterval = NSCalendarUnitDay; 

     // this will schedule the notification to fire at the fire date 
     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
     // this will fire the notification right away, it will still also fire at the date we set 
     [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 

    } 
} 
+0

Спасибо за ответ! Просто поставьте эту строку кода перед '[[UIApplication sharedApplication] presentLocalNotificationNow: localNotification];' и это делает трюк? Просто проверяя, чтобы я ничего не пропускал. – SRMR

+0

Я обновил свой ответ, чтобы включить полный метод. – Dash

+0

Это проверяет, разрешены ли уведомления, прежде чем беспокоиться о его создании и расписании. – Dash

-2

На тумблер на мероприятии, попробуйте следующее -

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
Смежные вопросы