HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 计划通知在特定时间触发 – Swift大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我有一个uidatepickerview,让用户选择一个时间.目前在我的代码中,我选择的时间作为dateA传递.然后我循环查看在单独的uitableview中选择的所有日期,并检查它们是否等于今天(例如星期二).如果天数相同,那么我会在选定的时间发送通知作为dateA.但是,当我尝试发送通知时,它不会被发送.

这是我的代码片段,显示了我尝试过的内容

var dateA: Date? = nil//where selected time is kept

    var weekdaysChecked = [String]()//where selected weekdays are kept

    var alarms = [Alarm]() {
        didSet {
            tableView.reloadData()
        }
    }


    override func viewDidLoad() {
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.sound],completionHandler: { (didAllow,error) in
        })

    }


    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "alarmCell",for: indexPath) as! DisplayAlarmCell

        let row = indexPath.row
        let alarm = alarms[row]
        let date = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat  = "EEEE"//"EE" to get short style
        let dayInWeek = dateFormatter.string(from: date)


        if(alarms.count == 40) {
            self.navigationItem.rightBarButtonItem?.isEnabled = false
            tableView.reloadData()
        }

        cell.alarmTitle.text = alarm.alarmLabel
        cell.clockTitle.text = alarm.time

        for weekdays in weekdaysChecked {
            if(dayInWeek == weekdays){
                let content = UNMutableNotificationContent()
                content.title = alarm.alarmLabel!
                content.subtitle = alarm.time!
                content.sound = UNNotificationSound(named: "Spaceship_Alarm.mp3")

                let trigger = Calendar.current.dateComponents([.hour,.minute],from: dateA!)
                let triggerNotif = UNCalendarNotificationTrigger(dateMatching: trigger,repeats: false)

                let triggerRequest = UNNotificationRequest(identifier: "AlarmNotif",content: content,trigger: triggerNotif)

                UNUserNotificationCenter.current().add(triggerRequest,withCompletionHandler: nil)

                print("This is the correct day.")
            }
        }

解决方法

假设您正在看到“这是正确的一天”消息,则候选问题是使用UNNotificationRequest的固定标识符.正如 the docs所说,“如果标识符不唯一,则不会发送通知”.

另外,如果requestAuthorization调用失败,我建议添加错误消息.现在,如果许可因任何原因失败,您将不会知道,也不会发送任何通知.

不相关的,cellForRowAt不是创建通知的正确位置.如果用户没有碰巧将特定单元格滚动到视图中,则不会创建任何通知.如果用户将单元格滚出视图然后返回视图,您将尝试再次创建相同的通知请求.底线,无论是否出现细胞(以及是否稍后再次出现)与是否应创建通知无关.

通知的创建属于更新模型的位置(或响应某些用户操作,如选中复选框等).

大佬总结

以上是大佬教程为你收集整理的ios – 计划通知在特定时间触发 – Swift全部内容,希望文章能够帮你解决ios – 计划通知在特定时间触发 – Swift所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: