用于调度通知的唯一标识符,Swift 3 iOS 10
Posted
技术标签:
【中文标题】用于调度通知的唯一标识符,Swift 3 iOS 10【英文标题】:Unique Identifier for scheduling notifications, Swift 3 iOS 10 【发布时间】:2017-01-29 22:16:44 【问题描述】:我正在安排具有唯一标识符的通知,因此我不必为每个通知创建一个新字符串。这一切都适用于调度,但问题在于试图取消它们。
这是我用于安排通知的代码...
let notifIdentifier = TaskManager.notification2.userInfo.description as String!
let trigger = UNCalendarNotificationTrigger(dateMatching: components , repeats: true)
let request = UNNotificationRequest(identifier: notifIdentifier! , content: TaskManager.notification2, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
这是取消通知的代码...
// Deletion of Cells ...
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
let managedObject: NSManagedObject = frc.object(at: indexPath) as! NSManagedObject
context.delete(managedObject)
if tableView == TaskTableViews
let itemController = TaskManager()
let nItem: List = frc.object(at: indexPath) as! List
itemController.nItem = nItem
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [itemController.notifIdentifier!] )
当我试图取消它们时,它们会很受打击。我已经通过将标识符更改为常规字符串来测试代码,并且一切正常,因此它绝对是唯一标识符。
对于为每个新任务/通知创建唯一 ID 有什么想法/建议?
【问题讨论】:
有什么问题?甚至是什么意思?请解释一下问题是什么。什么是 TaskManager? 一次只能取消一个通知(不能取消多个)。如果您安排通知,关闭应用程序,然后重新打开应用程序以删除任务,通知不会被取消。就像我说的那样,这一切都与字符串完美配合,但使用唯一 ID 是我的问题。我正在寻找另一种为每个任务创建唯一 ID 的方法。 “所有都与字符串完美配合,但使用唯一 ID 是我的问题”我也无法弄清楚这意味着什么。标识符 is 是一个字符串,所以我不明白你在画什么区别。而且您还没有展示您的标识符是如何创建和存储的,所以谁知道您在做什么?到目前为止,整个问题都完全不清楚(至少对我而言)。 OK 创建一个唯一的字符串,我使用 TaskManager.notification2.userInfo.description 作为字符串!而不是为 UNNotifcationRequest 组成一个字符串,例如“Whatever” 问题是,“为通知创建唯一标识符”你不能批评我的代码。下次尝试回答问题而不是批评代码。如果您无法回答问题,请继续。 【参考方案1】:安排通知
@IBAction func scheduleNotification(_ sender: AnyObject)
let uuid = UUID().uuidString
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: "Example", arguments: nil)
content.sound = UNNotificationSound.default()
//...
var dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: self.datePicker.date)
dateComponents.second = 0
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
let request = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) (error) in
if let errorPerforms = error
print(errorPerforms.localizedDescription)
else
print("Success")
let managedObject = ManagedObject(context: self.managedObjectContext!)
managedObject.setValue(uuid, forKey: "uuid")
//...
do
try self.managedObjectContext.save()
self.dimiss()
catch
从indexPath
中删除通知。
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
switch editingStyle
case .delete:
let managedObject = self.fetchedResultsController.object(at: indexPath)
self.managedObjectContext.delete(managedObject)
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [managedObject.uuid!])
center.removePendingNotificationRequests(withIdentifiers: [managedObject.uuid!])
do
try self.managedObjectContext.save()
self.tableView.reloadData()
catch
default:
break
这很好用!当您使用 NSFetchedResultsControllerDelegate
协议方法时。希望对你有帮助
【讨论】:
不幸的是,这对我不起作用。我可以联系您进一步讨论吗? 好的!有什么可以帮助你的吗?以上是关于用于调度通知的唯一标识符,Swift 3 iOS 10的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS(Swift 3)上断开 Firebase 通知?