В проекте, над которым я работаю, есть расширение, которое записывает данные в UserDefaults. Затем в содержащем приложении пользовательский интерфейс должен обновляться в соответствии с изменениями. Проблема в том, что UserDefaults.didChangeNotification
не срабатывает, если только экран не исходит из фона. В чем может быть причина и есть ли способ исправить или еще как получить нужное обновление?
Запись данных в расширение:
let sharedUserDefaults = UserDefaults(suiteName: Common.UserDefaultsSuite)
var receivedNotifications = sharedUserDefaults?.array(forKey: Common.ReceivedNotifications)
if receivedNotifications != nil {
receivedNotifications?.append(aData)
} else {
receivedNotifications = [aData]
}
sharedUserDefaults?.set(receivedNotifications, forKey: Common.ReceivedNotifications)
Регистрация для уведомления в контроллере представления:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
}
И работа с измененными пользовательскими настройками по умолчанию (которые на самом деле не вызываются):
@objc func userDefaultsDidChange(_ notification: Notification) {
print("User defaults did change")
gatherReceivedNotifications()
}