SwiftUI - идентификатор локальных уведомлений с несколькими сущностями Core Data

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

Я использовал название этого элемента в качестве идентификатора, потому что все они разные, но если я добавлю один и тот же заголовок в два объекта, он отобразит уникальное уведомление о последнем добавленном элементе, потому что он заменит старый и то, что я хочу - иметь разные уведомления с одним и тем же элементом в разных объектах.

Это мой фактический код локального уведомления.

let content = UNMutableNotificationContent()
content.title = self.items.itemsData[item].title
content.body = "Notification"
content.sound = UNNotificationSound.default
                                            
var dateComponents = DateComponents()
dateComponents.weekday = 2
dateComponents.hour = 8
dateComponents.minute = 00
                                            
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
                                            
let request = UNNotificationRequest(identifier: self.items.itemsData[item].title, content: content, trigger: trigger)
                                            
UNUserNotificationCenter.current().add(request)

person xmetal    schedule 05.08.2020    source источник


Ответы (1)


Вместо использования self.items.itemsData[item].title, которое одинаково каждый раз, когда создается новый UNNotificationRequest для определенного item, используйте UUID().uuidString, который создает новый уникальный идентификатор при каждом вызове. Вероятно, вы могли бы использовать этот уникальный идентификатор в сочетании с title, если это более точно для вашего сценария.

let request = UNNotificationRequest(identifier: self.items.itemsData[item].title + UUID().uuidString, content: content, trigger: trigger)
person Frankenstein    schedule 05.08.2020
comment
Это здорово, но что, если я хочу удалить это уведомление? Как я могу получить к нему доступ после создания? - person xmetal; 05.08.2020
comment
В этом случае вы можете сохранить идентификатор в своем основном объекте данных. - person Frankenstein; 05.08.2020
comment
Но поскольку у меня разные сущности, если я храню UUID в одном, может быть, у меня такой же в другом, или они полностью уникальны во всем проекте? - person xmetal; 05.08.2020
comment
UUID().uuidString меняется каждый раз, когда вы его называете. Не в рамках проекта каждый экземпляр создает новое уникальное значение. - person Frankenstein; 05.08.2020
comment
Я попробую и посмотрю, как это работает. Большое спасибо! - person xmetal; 05.08.2020