当我在TabViews
和onAppear
之间切换时,我的代码工作得很好,onAppear
能够做后台函数来做计算。然而,当我的应用程序加载MainTabView
的onAppear
不工作,显示的数据是空的。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
,这是刷新页面的方法吗?
谢谢
1条答案
按热度按时间62lalag41#
onAppear
的问题是它会被多次调用。无论如何,你最好早点去捡。在认证之后。为此,您可以创建一个名为
AppModel
的单例对象authenticate并获取其init
中的所有内容。使用.environmentObject
将模型传递到View层次结构中,这具有预览时可以使用不同单例的优点。当检查核心数据时,您将在Xcode应用程序模板中找到此模式。