7

Fino iOS 9 abbiamo scrivere local notifications come questoCome impostare la frequenza di ripetizione di notifica per l'utente

UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = pickerDate; 
localNotification.alertBody = self.textField.text; 
localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
localNotification.repeatInterval = NSCalendarUnitMinute; 
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

e nella comunicazione locale abbiamo repeatInterval, ora in WWDC2016 Apple ha annunciato User Notification che contiene

  • UNTimeIntervalNotificationTrigger.
  • UNCalendarNotificationTrigger.

    UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES]; 
    

il codice di cui sopra si innescherà notifica dopo ogni minuto. Ma non è possibile impostare la data.

NSDateComponents* date = [[NSDateComponents alloc] init]; 
date.hour = 8; 
date.minute = 30; 

UNCalendarNotificationTrigger* triggerC = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:date repeats:YES]; 

il codice di cui sopra data può essere impostata e ripetere attiverà domani alle 08:30 non non dopo minuto.

In iOS 10 User Notification in che modo è possibile impostare l'ora della data con frequenza di ripetizione proprio come è possibile impostare in UILocalNotification?

voglio programmare User Notification domani alle 20:30 e continuare a ripetere dopo ogni minuto, proprio come il codice ho specificato nella parte superiore per quanto riguarda local notification

+0

Ciao a tutti, ho la stessa domanda. Fateci sapere se qualcuno ha già implementato questa funzionalità? ** FYI: ** La domanda è "Come impostare intervalli di ripetizione come ogni giorno, ogni mese, ogni minuto ecc. Per le notifiche locali in ** iOS 10 **". Sto aspettando. Grazie. –

+1

Trovato qualche soluzione per il problema precedente? –

+0

Anche molto correlati: [UserNotification in 3 giorni, quindi ripetere ogni giorno/ora - iOS 10] (http://stackoverflow.com/q/38380783/2415822) – JAL

risposta

0

Per iOS 10 è possibile utilizzare in questo modo:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:fireDate]; 
UNCalendarNotificationTrigger* trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES]; 

ha lo stesso effetto dal codice iOS 9. Per ripetere devi solo usare i componenti che vuoi ripetere.

1

ispirato @Ramon Vasconcelos, sto utilizzando il seguente codice per impostare gli intervalli e fireDate insieme

switch (interval) { 
    case NSCalendarUnitMinute: { 
     unitFlags = NSCalendarUnitSecond; 
     break; 
    } 
    case NSCalendarUnitHour: { 
     unitFlags = NSCalendarUnitMinute | NSCalendarUnitSecond; 
     break; 
    } 
    case NSCalendarUnitDay: { 
     unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
     break; 
    } 
    case NSCalendarUnitWeekOfYear: { 
     unitFlags = NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
     break; 
    } 
    case NSCalendarUnitMonth:{ 
     unitFlags = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
    } 
    case NSCalendarUnitYear:{ 
     unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
    } 
    default: 
     unitFlags = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
     break; 
} 
NSDateComponents *components = [[NSCalendar currentCalendar] components:unitFlags fromDate:fireDate]; 
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:interval != 0];