SWiftUI - 在本地通知中访问 UUID.uuidString 标识符
SWiftUI - Access UUID.uuidString Identifier in Local Notification
如何在添加通知后访问 UUID.uuidString 标识符?假设我想删除该通知,我该如何调用它?
我不能为一个项目使用唯一的字符串,因为我可能在不同的核心数据实体中有两个不同时间的通知,如果我对 on 使用一个字符串,它将影响同一项目的所有通知。
// Notification
let content = UNMutableNotificationContent()
content.title = self.test.testData[item].title
content.body = "Notification"
content.sound = UNNotificationSound.default
var dateComponents = DateComponents()
dateComponents.weekday = 5
dateComponents.hour = 6
dateComponents.minute = 13
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
使用 UUID.init().uuidString
对象创建一个唯一标识符,并在创建新通知时将其保存到您的 managedObject
,如下所示。
// A unique identifier
let identifier = UUID.init().uuidString
// Managed Object
let managedObject = Notifications(context: context)
managedObject.setValue(identifier, forKey: "identifier")
//...
// Notification Content
let content = UNMutableNotificationContent.init()
//...
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
//...
然后您可以随时取消通知。
context.delete(managedObject)
if context.hasChanges {
do {
// Cancel the registered notification with given identifier
if let identifier = managedObject.value(forKey: "identifier") as? String {
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [identifier])
center.removePendingNotificationRequests(withIdentifiers: [identifier])
}
try context.save()
} catch {
fatalError()
}
}
NOTE: This is a non-repeatable notification content.
由于您要添加与 testData
中的特定元素相对应的本地通知,您可以将新的 attribute
添加到 Core Data
对象 testData
并将其命名notificationIdentifier
。为 testData
核心数据实体重新创建模型,然后在将 testData 实体保存到核心数据之前设置 notificationIdentifier
值。
let notificationIdentifier = UUID().uuidString
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
//...
UNUserNotificationCenter.current().add(request)
//...
testEntity.notificationIdentifier = notificationIdentifier
在这里您可以获得特定 testEntity
的 notificationIdentifier
并且您可以从标识符中删除旧的本地通知并使用新的 notificationIdentifier
创建新的本地通知并更新新的notificationIdentifier
到核心数据 testEntity
。
如何在添加通知后访问 UUID.uuidString 标识符?假设我想删除该通知,我该如何调用它?
我不能为一个项目使用唯一的字符串,因为我可能在不同的核心数据实体中有两个不同时间的通知,如果我对 on 使用一个字符串,它将影响同一项目的所有通知。
// Notification
let content = UNMutableNotificationContent()
content.title = self.test.testData[item].title
content.body = "Notification"
content.sound = UNNotificationSound.default
var dateComponents = DateComponents()
dateComponents.weekday = 5
dateComponents.hour = 6
dateComponents.minute = 13
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
使用 UUID.init().uuidString
对象创建一个唯一标识符,并在创建新通知时将其保存到您的 managedObject
,如下所示。
// A unique identifier
let identifier = UUID.init().uuidString
// Managed Object
let managedObject = Notifications(context: context)
managedObject.setValue(identifier, forKey: "identifier")
//...
// Notification Content
let content = UNMutableNotificationContent.init()
//...
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
//...
然后您可以随时取消通知。
context.delete(managedObject)
if context.hasChanges {
do {
// Cancel the registered notification with given identifier
if let identifier = managedObject.value(forKey: "identifier") as? String {
let center = UNUserNotificationCenter.current()
center.removeDeliveredNotifications(withIdentifiers: [identifier])
center.removePendingNotificationRequests(withIdentifiers: [identifier])
}
try context.save()
} catch {
fatalError()
}
}
NOTE: This is a non-repeatable notification content.
由于您要添加与 testData
中的特定元素相对应的本地通知,您可以将新的 attribute
添加到 Core Data
对象 testData
并将其命名notificationIdentifier
。为 testData
核心数据实体重新创建模型,然后在将 testData 实体保存到核心数据之前设置 notificationIdentifier
值。
let notificationIdentifier = UUID().uuidString
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
//...
UNUserNotificationCenter.current().add(request)
//...
testEntity.notificationIdentifier = notificationIdentifier
在这里您可以获得特定 testEntity
的 notificationIdentifier
并且您可以从标识符中删除旧的本地通知并使用新的 notificationIdentifier
创建新的本地通知并更新新的notificationIdentifier
到核心数据 testEntity
。