Проект, над которым я работаю, имеет расширение, которое записывает данные в 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()
}