使用开关启用和禁用本地通知 (swift 3)
Using a switch to enable and disable local notifications (swift 3)
我正在制作我的第一个应用程序,其中一个功能是待办事项列表。我有一个开关,当它关闭时禁用本地通知,当它打开时,只要开关打开,它就应该启用它们。我使用 UserDefaults
保存开关状态,通知确实出现,但是,它们不会重复,即使我指定它们应该 。现在我将通知设置为每 60 秒重复一次以进行测试,但当它起作用时将是两天。只要开关打开,如何让通知重复?我的开关代码:
@IBOutlet weak var switchout: UISwitch!
@IBAction func notifswitch(_ sender: Any) {
print ("hello")
if switchout.isOn
{
if #available(iOS 10.0, *), list.isEmpty == false {
let content = UNMutableNotificationContent()
content.title = "You have tasks to complete!"
content.subtitle = ""
content.body = "Open the task manager to see which tasks
need completion"
let alarmTime = Date().addingTimeInterval(60)
let components = Calendar.current.dateComponents([.weekday,
.hour, .minute], from: alarmTime)
let trigger = UNCalendarNotificationTrigger(dateMatching:
components, repeats: true)
let request = UNNotificationRequest(identifier:
"taskreminder", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request,
withCompletionHandler: nil)
} else {
print ("hello")
}
} else
{
UIApplication.shared.cancelAllLocalNotifications()
}
self.saveSwitchesStates()
我怀疑您使用了错误的取消 API。
而不是:
UIApplication.shared.cancelAllLocalNotifications()
尝试使用:
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
虽然这会取消您的应用程序的所有内容。如果你想做特定的通知,你可以这样做:
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "taskreminder")
更多信息 。
2)
现在关于您的通知不重复,即使您在设置触发器时设置了 true
,我发现您设置的时间需要匹配 [.weekday, .hour, .minute]
,这意味着它将在同一时间重复一周中的每一天。
尝试将 THIS 传递给 UNNotificationRequest
:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
我正在制作我的第一个应用程序,其中一个功能是待办事项列表。我有一个开关,当它关闭时禁用本地通知,当它打开时,只要开关打开,它就应该启用它们。我使用 UserDefaults
保存开关状态,通知确实出现,但是,它们不会重复,即使我指定它们应该 。现在我将通知设置为每 60 秒重复一次以进行测试,但当它起作用时将是两天。只要开关打开,如何让通知重复?我的开关代码:
@IBOutlet weak var switchout: UISwitch!
@IBAction func notifswitch(_ sender: Any) {
print ("hello")
if switchout.isOn
{
if #available(iOS 10.0, *), list.isEmpty == false {
let content = UNMutableNotificationContent()
content.title = "You have tasks to complete!"
content.subtitle = ""
content.body = "Open the task manager to see which tasks
need completion"
let alarmTime = Date().addingTimeInterval(60)
let components = Calendar.current.dateComponents([.weekday,
.hour, .minute], from: alarmTime)
let trigger = UNCalendarNotificationTrigger(dateMatching:
components, repeats: true)
let request = UNNotificationRequest(identifier:
"taskreminder", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request,
withCompletionHandler: nil)
} else {
print ("hello")
}
} else
{
UIApplication.shared.cancelAllLocalNotifications()
}
self.saveSwitchesStates()
我怀疑您使用了错误的取消 API。
而不是:
UIApplication.shared.cancelAllLocalNotifications()
尝试使用:
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
虽然这会取消您的应用程序的所有内容。如果你想做特定的通知,你可以这样做:
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "taskreminder")
更多信息
2)
现在关于您的通知不重复,即使您在设置触发器时设置了 true
,我发现您设置的时间需要匹配 [.weekday, .hour, .minute]
,这意味着它将在同一时间重复一周中的每一天。
尝试将 THIS 传递给 UNNotificationRequest
:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)