私はユーザーにいくつかのタスクを思い出させるためにカスタムローカル通知を設定できるようにするいくつかのコードを書こうとしています。 私はユーザー通知フレームワークを使用しています。 基本的に、ユーザーは毎週何らかの石鹸を購入するか、毎年誕生日の願いをするか、毎月何かをチェックするように通知する通知を設定することができます(これは単なる例です)。ユーザーが選択した迅速な3回の繰り返しでのローカル通知
これまでのところ、繰り返し間隔なしでローカル通知を設定することができました。
func scheduleNotif() {
let dateformatter = DateFormatter()
dateformatter.dateStyle = DateFormatter.Style.medium
dateformatter.timeStyle = DateFormatter.Style.short
let dateFromString = dateformatter.date(from: selectDateTextField.text!)
let fireDateOfNotification: Date = dateFromString!
//if notif are allowed
let content = UNMutableNotificationContent()
content.title = notifTitleTextField.text!
content.body = notifNoteTextView.text
content.sound = UNNotificationSound.default()
content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber
let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate,
repeats: false)
//Schedule the Notification
let titleNospace = notifTitleTextField.text?.replacingOccurrences(of: " ", with: "")
let identifier = titleNospace
let request = UNNotificationRequest(identifier: identifier!, content: content, trigger: trigger)
self.center.add(request, withCompletionHandler: { (error) in
if let error = error {
print(error.localizedDescription)
}
})
}
日付は、日付ピッカーから選択されます。 別のピッカーから、繰り返し間隔(なし、毎日、毎週、毎月、毎年、特定の日)を選択するようにします。 これをどのように達成できるかわかりません。 if else if文を使用する必要がありますか? (それは私には本当に正しいとは思われません) これを達成するより良い方法はありますか? ありがとうございました!
let dateformatter = DateFormatter()
dateformatter.dateStyle = .medium
dateformatter.timeStyle = .short
let dateFromString = dateformatter.date(from: selectDateTextField.text!)
let fireDateOfNotification: Date = dateFromString!
var trigger: UNCalendarNotificationTrigger
var triggerDate: DateComponents
var repeatInterval = Bool()
if repeatingInterval == "Hourly" {
triggerDate = Calendar.current.dateComponents([.minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Daily" {
triggerDate = Calendar.current.dateComponents([.hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Weekly" {
triggerDate = Calendar.current.dateComponents([.weekday, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Monthly" {
triggerDate = Calendar.current.dateComponents([.day, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Yearly" {
triggerDate = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else {
triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification)
repeatInterval = false
}
trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: repeatInterval)
//Schedule the Notification
......
はまだ異なる間隔(例えば隔週、一日おきに、半年ごとなど)のためにそれをスケジュールする方法を見つけることがあります:私はそれをこのように修正した瞬間のために