在我的应用程序中,我有一个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不是创建通知的正确位置.如果用户没有碰巧将特定单元格滚动到视图中,则不会创建任何通知.如果用户将单元格滚出视图然后返回视图,您将尝试再次创建相同的通知请求.底线,无论是否出现细胞(以及是否稍后再次出现)与是否应创建通知无关.
通知的创建属于更新模型的位置(或响应某些用户操作,如选中复选框等).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。