Swiftui @EnvironmentObject没有';通过导航链接无法正常工作
我使用我的Swiftui @EnvironmentObject没有';通过导航链接无法正常工作,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,我使用我的@EnvironmentObject让我的团队数据可以被不同的人使用,但它不能很好地工作。当我通过列表中的navigationLink转到另一个视图时,一切正常。当我点击同一视图的按钮时,它崩溃了。 我想我弄错了什么。有人能帮忙解决这个问题吗?这是否意味着我需要首先在NavigationView中添加@EnvironmentObject,以便使用它?谢谢 演示: 错误消息: 致命错误:未找到TeamResult类型的ObservableObject。 TeamResult的View.e
@EnvironmentObject
让我的团队数据可以被不同的人使用,但它不能很好地工作。当我通过列表中的navigationLink转到另一个视图时,一切正常。当我点击同一视图的按钮时,它崩溃了。我想我弄错了什么。有人能帮忙解决这个问题吗?这是否意味着我需要首先在NavigationView中添加
@EnvironmentObject
,以便使用它?谢谢
演示:
错误消息:
致命错误:未找到TeamResult类型的ObservableObject。
TeamResult的View.environmentObject(:)可能作为此视图的祖先丢失。示例:file/BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros_Sim/Monoceros-39.4.3/Core/environmentObject.swift,第55行
2020-01-20 01:14:58.466655+0800 Fitness(SwiftUI)[49035:4851345]致命错误:未找到TeamResult类型的可观察对象。
TeamResult的View.environmentObject(:)可能作为此视图的祖先丢失。示例:file/BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros_Sim/Monoceros-39.4.3/Core/environmentObject.swift,第55行
尝试在NavigationLink的视图中添加environmentObject
NavigationLink(destination: GameDetailRecordView().environmentObject(teamResult))
嗨,我用这个方法,这个可以工作。但是我想知道为什么列表中的NavigationLink不需要添加.environmentObject(teamResult),而另一个需要添加.environmentObject(teamResult)。这是否意味着NavigationLink将创建一个新环境?我认为GameRecordListView()下面的所有视图。environmentObject(teamResult)完全可以使用@environmentObject teamResult。您好@frank61003,您是否已经找到了发生这种情况的原因?我也遇到了同样的情况。在运行时动态“创建”导航链接时,似乎所有
EnvironmentObject
都不会被传递。在这些情况下,您必须再次提供environmentObjects。
import SwiftUI
import SwiftyJSON
struct TeamDetail: View {
@EnvironmentObject var teamResult : TeamResult
// @ObservedObject var teamResult: TeamResult
var roles = ["GameRecord", "Schedule", "Money", "Member"]
@State var show = false
@State private var selectedIndex = 0
var body: some View {
ZStack{
VStack {
Picker(selection: $selectedIndex, label: Text("")) {
ForEach(0..<roles.count) { (index) in
Text(self.roles[index])
}
}
.pickerStyle(SegmentedPickerStyle())
HStack{
containedView()
}
Spacer()
}
}.navigationBarTitle(teamResult.groupName)
.onAppear(perform:{
})
}
//select different view by selectedIndex
func containedView() -> AnyView {
switch selectedIndex {
case 0:
return AnyView(
GameRecordListView().environmentObject(teamResult) <-create environmentObject here
)
case 1:
return AnyView(Text("")
.padding(30))
case 2:
return AnyView(
BookkeepingView().environmentObject(teamResult)
)
default:
return AnyView(
TeamMemberListView().environmentObject(teamResult))
}
}
}
import SwiftUI
struct GameDetailRecordView: View {
@EnvironmentObject var teamResult : TeamResult
var body: some View {
Text("ID:\(teamResult.groupID)Name:\(teamResult.groupName)")
}
}
NavigationLink(destination: GameDetailRecordView().environmentObject(teamResult))