繁体   English   中英

如何在 Swiftui(iOS 15 / Xcode 13.2.1)的 AppDelegate 中使用我的@EnvironmentObject?

[英]How to use my @EnvironmentObject in AppDelegate in Swiftui (iOS 15 / Xcode 13.2.1)?

我有一个 class:

class AppInfos_M: ObservableObject {
    @Published var currentUser: User_M = User_M()
    @Published var userTo: User_M = User_M()
}

我将它从 main 声明为 environmentObject:

...
@main
struct TestApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
...

    @StateObject var appInfos_M = AppInfos_M()
    
    var body: some Scene {
        WindowGroup {
            LaunchScreen_V()
                .environmentObject(appInfos_M)
...
 
        }
    }
}

class 在我的应用程序中运行良好。 现在我需要从 AppDelegate 修改它,因为我需要在收到通知时获取 appInfos_M.userTo.id。 我尝试了几件事,但没有一个有效。 我怎样才能访问它?

在我需要它的所有观点中,我都以这种方式声明并且它工作正常,但在 AppDelegate 中却不行,为什么?

 @EnvironmentObject var appInfos_M: AppInfos_M

这是我尝试过的一项无效的测试:

请注意,3 个小点 (...) 用于放置无用代码。

...
class AppDelegate: NSObject, UIApplicationDelegate {...}

...

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
...

func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {

@EnvironmentObject var appInfos_M: AppInfos_M

 let userInfo = response.notification.request.content.userInfo

appInfos_M.userTo.id = "just for testing here" // <- i get this error : Thread 1: Fatal error: No ObservableObject of type AppInfos_M found. A View.environmentObject(_:) for AppInfos_M may be missing as an ancestor of this view.

...

您始终可以像这样将AppInfos_M存储在您的AppDelegate

class AppDelegate: NSObject, UIApplicationDelegate {
    var appInfos = AppInfos_M()
    (...)
}

然后,您可以将其用作 EnvironmentObject:

...
@main
struct TestApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
...
    
    var body: some Scene {
        WindowGroup {
            LaunchScreen_V()
                .environmentObject(appDelegate.appInfos)
...
 
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM