9

私は、毎週日曜日または毎週月曜日などにローカル通知を繰り返す iOS 10 のローカル通知スケジューリング モジュールに取り組んでいます。この日付に通知をスケジュール2016-12-27 10:53:22 +0000UNCalendarNotificationTrigger、repeat value を true に設定すると、通知はその日付の通知に対してトリガーされ、来週は同時に繰り返されないとします。

その理由は何でしょうか?また、iOS 10 で特定の日に毎週繰り返す方法を教えてください。

ローカル通知を作成するコードは次のとおりです。

 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)")
   }
})

アップデート:

また、通知がその日に発生した後、保留中の通知が存在しないことを確認するか、再度スケジュールが変更されたかどうかを確認することも発見しました。実際には、repeat が true に等しい場合、来週に再びスケジュールされることはありません。

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

            for localNotification in notficiations {

                print(localNotification)

            }
        })

結果は次のとおりです。

<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>>

本当にiOSのバグかどうかはわかりません。

4

2 に答える 2

7

トリガーの日付形式は、曜日で通知を繰り返すには適切ではありません。現在のトリガー日付コンポーネントには年、月、日などが含まれているため、この通知は特定の月と日に毎年繰り返されます。以下のようにトリガー日付を変更して、曜日に通知を繰り返します。

 let triggerDate =  Calendar.current.dateComponents([.weekday,.hour,.minute], from: date as Date)
于 2016-12-27T07:28:56.050 に答える