2016-12-26 19 views
6

. i 2016-12-27 10:53:22 +0000 ve tekrar değeri ile UNCalendarNotificationTrigger doğrudur eşittir kullanarak bu tarih için bir bildirim planlanan Diyelim bildirim bu tarihten içinde olanlar için tetiklenen olsun ve aynı zamanda önümüzdeki hafta tekrar etmez.tekrarlayın UserNotification iOS 10 haftanın her spesifik gün örneğin her Pazar veya her Monday..etc için yerel bildirim tekrarlar iOS 10 yerel bildirim zamanlama modülü üzerinde çalışıyorum

Ne Bunun nedeni ne olabilir? ve nasıl İşte

iOS 10. yılında belirli bir gün boyunca her hafta tekrarlamak mümkün yerel bildirim oluşturmak için kod olmasıdır:

let content = UNMutableNotificationContent() 
content.title = object.title 
content.body = object.body 
content.sound = UNNotificationSound.default() 

let date = object.fireDate 
let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: date as Date) 

let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, 
                  repeats: true) 
// Swift 
let identifier = object.id 
let request = UNNotificationRequest(identifier: identifier, 
                content: content, trigger: trigger) 
localNotification.add(request, withCompletionHandler: { (error) in 

    if error != nil { 
    // Something went wrong 
    print(error!) 

    }else { 

    print("Reminder \(object.id) has been added successfully at \(object.fireDate)") 
    } 
}) 

Güncelleme:

Ben de sonra keşfettim Bildirim, o tarihte işten çıkarılır ve bekleyen başka bir bildirim olmadığından emin olunması veya yeniden planlanıp yeniden ayarlanmadığının kontrol edilmesi. aslında tekrar eşittir doğru, önümüzdeki hafta için tekrar planlanmamıştır.

UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: { (notficiations) in 

      for localNotification in notficiations { 

       print(localNotification) 

      } 
     }) 

Ve sonuç oldu:

<UNNotificationRequest: 0x174223ca0; identifier: A1, content: <UNNotificationContent: 0x1742e2980; title: My Title, subtitle: (null), body: My Body, categoryIdentifier: , launchImageName: , peopleIdentifiers: (
), threadIdentifier: , attachments: (
), badge: (null), sound: <UNNotificationSound: 0x1740b1820>, hasDefaultAction: YES, shouldAddToNotificationsList: YES, shouldAlwaysAlertWhileAppIsForeground: NO, shouldLockDevice: NO, shouldPauseMedia: NO, isSnoozeable: NO, fromSnooze: NO, darwinNotificationName: (null), darwinSnoozedNotificationName: (null), trigger: <UNCalendarNotificationTrigger: 0x174223cc0; dateComponents: <NSDateComponents: 0x17415e140> 
    Calendar Year: 2016 
    Month: 12 
    Day: 27 
    Hour: 14 
    Minute: 46 
    Second: 15, repeats: YES>> 

bilmiyorum eğer iOS onun aslında bir böcek ya da değil. Tarih biçimini Tetikleme

cevap

6

haftada bir gün içinde bildirim tekrarlamak doğru değildir. Geçerli tetik tarih bileşenleri yıl, ay, gün, vb içerir yüzden haftanın bir gününde bildirim tekrarlamak aşağıda belirtilen gibi o belirli ay ve day.Change tetik tarihi her yıl bu bildirim tekrarlayın.

func addNotificationForAlarm(alarm: MyAlarm) { 

    let myAlarmNotifContent = UNMutableNotificationContent() 
    myAlarmNotifContent.title = "Reminder" 
    myAlarmNotifContent.body = alarm.activity 
    myAlarmNotifContent.sound = UNNotificationSound.default() 

    if alarm.repeatDays.count == 1 { 

    } else { 

     for index in 1...alarm.repeatDays.count { 
      createNotif(date: alarm.date, weekDay: index, content: myAlarmNotifContent) 
     } 
    } 

} 

private func createNotif(date: Date, weekDay: Int, content: UNNotificationContent) { 

    var dateComponent = DateComponents() 
    dateComponent.weekday = weekDay 
    dateComponent.hour = Calendar.current.dateComponents([.hour], from: date).hashValue 
    dateComponent.minute = Calendar.current.dateComponents([.minute], from: date).hashValue 

    let myAlarmTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true) 

    setupNotificationSettings() 

    let identifier = "Your-Notification" 
    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: myAlarmTrigger) 
    let center = UNUserNotificationCenter.current() 
    center.add(request, withCompletionHandler: { (error) in 
     if error != nil { 
      //TODO: Handle the error 
     } 
    }) 
} 

Temelde ne bulduk Eğer alarm tetiklemek istediğiniz her gün için ayrı bir bildirim ayarlayabilmenizdir: Burada

let triggerDate = Calendar.current.dateComponents([.weekday,.hour,.minute], from: date as Date) 
0

çalışmalıdır yaklaşımdır. Örneğin, her pazartesi ve her Salı günü istiyorsanız, her gün için bir tarih bileşeni oluşturun ve bunu tetikleyiciye ekleyin. Mükemmel değil ama zaman aralıklarını hesapladığımı düşündüğüm bir çözüm.

+0

Bazı açıklamalar cevabınızın kalitesini önemli ölçüde artıracaktır – mrun

İlgili konular