Предотвращение сброса состояния при переходе приложения из фонового режима на передний план ⇐ 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» после нажатия на уведомление и просмотра листа.
Я работаю над приложением для 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» после нажатия на уведомление и просмотра листа.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Назначение приложения iOS: динамически открывать приложение и выводить его на передний план.
Anonymous » » в форуме IOS - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-