Swiftui Xcode 11 beta 3在一起使用NavigationLink、@EnvironmentObject和List时崩溃

Swiftui Xcode 11 beta 3在一起使用NavigationLink、@EnvironmentObject和List时崩溃,swiftui,xcode11,combine,Swiftui,Xcode11,Combine,我在SwiftUI/Xcode 11 beta 3中遇到了一个奇怪的崩溃,代码如下所示(我只保留了显示行为的最小值): 导入快捷界面 进口联合收割机 最后一个类AppData:BindableObject{ 让didChange=PassthroughSubject() init(){} } 结构ContentView:View{ var body:一些观点{ 导航视图{ NavigationLink(目标:DetailView()){ 文本(“链接”) } } } } 结构详细视图:视图{ @

我在SwiftUI/Xcode 11 beta 3中遇到了一个奇怪的崩溃,代码如下所示(我只保留了显示行为的最小值):

导入快捷界面
进口联合收割机
最后一个类AppData:BindableObject{
让didChange=PassthroughSubject()
init(){}
}
结构ContentView:View{
var body:一些观点{
导航视图{
NavigationLink(目标:DetailView()){
文本(“链接”)
}
}
}
}
结构详细视图:视图{
@环境对象变量appData:appData
//@ObjectBinding var appData=appData()->有效
var body:一些观点{
名单{
文本(“A”)
文本(“B”)
文本(“C”)
}
}
}
BindableObject
被注入到
SceneDelegate.swift
中,如下所示:

。。。。
//将UIHostingController用作窗口根视图控制器
如果让windowScene=场景为?新世{
let window=UIWindow(windowScene:windowScene)
window.rootViewController=UIHostingController(rootView:ContentView()
.environmentObject(AppData()))
self.window=window
window.makeKeyAndVisible()的
}
....
当遵循
导航链接时,它会与

线程1:EXC\u BAD\u指令(code=EXC\u I386\u INVOP,子代码=0x0)

如果我从详细视图中删除
列表
视图,它工作正常。如果改用
@ObjectBinding
(如代码中的注释行)也一样


与以前Beta中使用的代码相同

我认为这是故意的。创建DetailView()时,它与层次结构断开连接,因此它不会继承相同的环境

如果将ContentView更改为以下内容,则不会崩溃。我记得情态动词也有类似的问题:


结构ContentView:View{
@环境对象变量appData:appData
var body:一些观点{
导航视图{
导航链接(目标:DetailView().environmentObject(appData)){
文本(“链接”)
}
}
}
}

这是Xcode 11 beta 3中的一个bug。旧的行为很可能会重演

自2019年7月4日起:

步骤4

在Xcode 11 beta 3中,LandmarkDetail视图不会自动访问视图层次结构环境中的UserData对象。解决方法是将environmentObject(:)修改器添加到LandmarkDetail视图


我也有同样类型的车祸。这是来自控制台的部分错误消息:错误:模块导入失败:dyld中第1行的无效令牌(rlm_lldb.py,第37行)文件“temp.py”:未找到符号:$s7SwiftUI14NavigationLinkVyxGAA4ViewAAMc引用自:。。。(从那里开始,引用路径等等。你把你的设备升级到beta 3了吗?@Jake:这是模拟器,
@EnvironmentObject
的目的是什么?如果我必须将它显式地传递给我导航到的每个视图,为什么不使用普通参数(@binding or not)?嗯,不是所有的视图。只有像DetailView和其他一些情况下,@EnvironmentObject对大多数人来说仍然起作用。我认为我们可以同意,在创建DetailView时,因为它没有父视图,它不能继承环境。有争议的是,当插入时,SwiftUI是否应该自动附加环境RTE(呈现)到层次结构中。我认为不应该这样做,否则它可能会覆盖您设置的特定环境。我认为SwiftUI只是警告,如果您希望它继承环境,您必须自己做。我认为,我没有在任何地方读过它。我明白您的观点,尽管我不同意:-)如果我想通过我的应用程序“手动”创建数据流,我会在视图的初始化器中使用普通参数。该环境应该在任何地方都可以访问,就像它在beta 1和beta 2中所做的那样。您确定它在beta 1和beta 2中也可以这样工作吗。我记得至少一周前有过这个问题。