swift onAppear在TabView更改之前不工作

s4n0splo  于 2023-05-28  发布在  Swift
关注(0)|答案(1)|浏览(127)

当我在TabViewsonAppear之间切换时,我的代码工作得很好,onAppear能够做后台函数来做计算。然而,当我的应用程序加载MainTabViewonAppear不工作,显示的数据是空的。
AuthView,在用户通过身份验证后运行:

NavigationView {
                MainTabView(showSignInView: $showSignInView)
            }
            .onAppear {
                let authUser = try? AuthService.shared.getAuthenticatedUser()
                self.showSignInView = authUser == nil
                homeViewModel.fetchAll()
            }

MainTabView:

NavigationView {
            TabView {
                    HomeView(viewModel: HomeViewModel())
                        .tabItem {
                            Label("Home", systemImage: "house.fill")
                        }
                    ListView()
                        .tabItem {
                            Label("Absences", systemImage: "image")
                        }
                    SettingsView(showSignInView: $showSignInView)
                        .tabItem {
                            Label("Settings", systemImage: "gearshape")
                        }
                    }
                    .environment(\.colorScheme, darkModeEnabled ? .dark : .light)
                    .accentColor(AppColor.green)
            }
        .onAppear{
            print("loaded")
            homeViewModel.fetchAll()
        }

然而,似乎在此之前没有运行homeViewModel.fetchAll(),并且在关闭和重新打开应用程序时没有检索数据
如果先打开ListView,这是相同的,只有当我手动切换选项卡时,视图才会更新。
我正在运行SwiftUI,这是刷新页面的方法吗?
谢谢

62lalag4

62lalag41#

onAppear的问题是它会被多次调用。无论如何,你最好早点去捡。在认证之后。
为此,您可以创建一个名为AppModel的单例对象authenticate并获取其init中的所有内容。使用.environmentObject将模型传递到View层次结构中,这具有预览时可以使用不同单例的优点。当检查核心数据时,您将在Xcode应用程序模板中找到此模式。

相关问题