Предотвращение сброса состояния при переходе приложения из фонового режима на передний планIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Предотвращение сброса состояния при переходе приложения из фонового режима на передний план

Сообщение Гость »


Я работаю над приложением для iOS, которое отображает лист, когда пользователь нажимает на уведомление. Проблема возникает, когда приложение переводится из фонового режима на передний план при нажатии на уведомление. Несмотря на то, что для свойства @Published showReminderDetail установлено значение true, чтобы представить лист с дополнительной информацией, оно переопределяется и сбрасывается на false из-за логики инициализации в моем классе @main, сводящей на нет изменение состояния.

Вот последовательность событий, записанная моей консолью:

Текущее состояние showReminderDetail: false Уведомление получено
Обработка уведомления для идентификатора напоминания: E6BDC19C-17F0-4945-96AE-772A4DAA36B9
Получено уведомление о напоминании с идентификатором: E6F0-4945-96AE-772A4DAA36B9
selectedReminderID теперь: Необязательный(E6BDC19C-17F0-4945-96AE-772A4DAA36B9)
Для showReminderDetail установлено значение true
Текущее состояние showReminderDetail: false

Вот упрощенная версия логики моего приложения:

class AppLogic: NSObject, ObservableObject { @Published вар showReminderDetail = false @Published var selectedReminderID: UUID? = ноль // Другие свойства и инициализаторы func handleNotificationResponse (с напоминанием ID: UUID) { DispatchQueue.main.async { self.selectedReminderID = идентификатор напоминания self.showReminderDetail = правда } } // Дополнительные методы } расширение AppLogic: UNUserNotificationCenterDelegate { func userNotificationCenter (_ центр: UNUserNotificationCenter, ответ DidReceive: UNNotificationResponse, withCompletionHandlercompleteHandler: @escaping () -> Void) { // Логика обработки уведомлений } } и мой просмотр контента:

struct ContentView: Просмотр { @EnvironmentObject var appLogic: AppLogic var body: some View { // Структура ContentView .sheet(isPresented: $appLogic.showReminderDetail) { // Содержимое листа } } } и мой @main:

@main struct Conditional_Reminder_AppApp: Приложение { пусть persistenceController = PersistenceController.shared // Инициализируем AppLogic с помощью экземпляра ReminderStorage @StateObject var appLogic: AppLogic в этом() { пусть напоминаниеStorage = ReminderStorage (контекст: persistenceController.container.viewContext) _appLogic = StateObject(wrappedValue: AppLogic(reminderStorage: напоминаниеStorage)) } var body: некоторая сцена { ОкноГруппа { КонтентПросмотр() .environment(\.managedObjectContext, persistenceController.container.viewContext) .environmentObject(appLogic) } } } Я думаю, проблема в том, как мой класс @main инициализирует объект AppLogic или, возможно, в том, как обрабатывается восстановление состояния, когда приложение переходит из фонового режима в передний. Однако я понятия не имею.

Как я могу сохранить состояние showReminderDetail как true, когда приложение выводится на передний план, позволяя листу отображаться так, как задумано?

Я пробовал обрабатывать состояние как UserDefaults вместо наблюдаемого объекта, но это тоже не сработало. Я ожидаю сообщение «Текущее состояние showReminderDetail: true» после нажатия на уведомление и просмотра листа.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»