IOS Swift 4 で毎日、毎週、毎月の通知を発行するアプリを構築しています。通知は、グレゴリオ暦を使用して完全に機能します。ただし、日付をヒジュラ暦 (Calendar(identifier: .islamicUmmAlQura)) に変更すると機能しません。UNCalendarNotificationTrigger が任意の日付をグレゴリオ暦に変換します。以下の毎月の通知コードは、グレゴリオ暦を使用している場合に完全に機能します。
func myNotification(at date: Date, withTitle title:String, andBody body:String, notificationIdentifier:String) {
let calendar = Calendar(identifier: .gregorian)
let components = calendar.dateComponents([.day,.hour, .minute], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.init(named: "notificationSound.wav")
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [notificationIdentifier])
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print(" error: \(error)")
}
}
}
(Calendar(identifier: .islamicUmmAlQura) を使用して日付をイスラムの日付に変換すると、以下のコードは機能しません。
func myNotification(at date: Date, withTitle title:String, andBody body:String, notificationIdentifier:String) {
let calendar = Calendar(identifier: .islamicUmmAlQura)
let components = calendar.dateComponents([.day,.hour, .minute], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.init(named: "notificationSound.wav")
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [notificationIdentifier])
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print(" error: \(error)")
}
}