Сводка: приложение запускается без получения новых данных, пока код действия уведомления .foreground
все еще выполняется.
Правка для ясности: здесь я имею в виду только локальные уведомления.
ИтакПока у меня есть уведомления, которые нужно отображать вовремя, кнопки действий, которые будут отображаться под уведомлением, и данные словаря userInfo, которые нужно правильно передать из тела уведомления в функцию didRecieve
в моем AppDelegate.
Однако кажется, что приложение запускается одновременно с кодом, выполняемым в операторе switch действия уведомления didRecieve
, в результате чего UserDefaults (в который сохраняется функция didReceive
) завершают сохранение с новыми значениями после того, как приложение уже запущеносо старыми значениями.
Есть ли способ отложить запуск приложения до тех пор, пока эти пользовательские значения не будут сохранены, или же существует лучший подход к этому вопросу.
Существует функция scheduleNotification()
, которая устанавливаетcontent.userInfo
.
Функция userNotificationCenter(_ center:didReceive:withCompletionHandler @escaping () -> Void)
получает это через response.notification.request.content.userInfo и все в порядке.
Когда пользователь нажимает одну из кнопок действий с уведомлением, которая имеет опцию .foreground
, он берет указанные выше данные userInfo
и сохраняет их по умолчанию, используяUserDefaults.standard.set(:forKey)
.
Ожидаемое поведение на этом этапе: приложение при запуске должно прочитать недавно установленные данные UserDefaults
и соответственно обновить свой пользовательский интерфейс.
Что происходит: приложение запускается безотносительночто бы ни было к недавно установленным User Defaults
данным.Однако при запуске двух уведомлений после запуска второго уведомления приложение отображает пользовательский интерфейс, соответствующий первому уведомлению, что говорит мне о том, что функция уведомления didReceive
выполняет свою работу, но только не до запуска приложения.