SWiftUI - доступ к идентификатору UUID.uuidString в локальном уведомлении - PullRequest
0 голосов
/ 06 августа 2020

Как я могу получить доступ к идентификатору 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)

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Поскольку вы добавляете локальное уведомление, соответствующее определенному элементу в testData, вы можете добавить новый attribute к Core Data объекту testData и назвать его notificationIdentifier. Воссоздайте модель для объекта testData Core Data, а затем перед сохранением объекта testData в основные данные установите значение notificationIdentifier.

let notificationIdentifier = UUID().uuidString
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
//...
UNUserNotificationCenter.current().add(request)
//...
testEntity.notificationIdentifier = notificationIdentifier

Здесь вы можете получить notificationIdentifier для конкретного testEntity и из идентификатора вы можете удалить старое локальное уведомление и создать новое локальное уведомление с новым notificationIdentifier и обновить новый notificationIdentifier до Core Data testEntity.

1 голос
/ 06 августа 2020

Создайте уникальный идентификатор, используя объект 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()
    }
}

ПРИМЕЧАНИЕ. Это неповторимое содержимое уведомления.

...