使用开关启用和禁用本地通知(swift 3)

时间:2017-05-31 01:25:17

标签: ios swift3 uilocalnotification uiswitch

我正在创建我的第一个应用,其中一个功能是待办事项列表。我有一个开关,当它关闭时禁用本地通知,并且只要开关打开,它就会启用它们。我使用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()

1 个答案:

答案 0 :(得分:1)

我怀疑您使用了错误的取消API。

而不是:

UIApplication.shared.cancelAllLocalNotifications()

尝试使用:

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

虽然取消了您应用的所有内容。如果要进行特定通知,可以执行以下操作:

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "taskreminder")

更多信息can be seen at this closely related question

2)

现在关于不重复的通知,即使您在设置触发器时设置了true,我发现您设置的时间需要匹配{{1这意味着它会在同一时间重复每周的每一天。

尝试将 THIS 传递给[.weekday, .hour, .minute]

UNNotificationRequest