如果我使用带有SwiftUI的默认模板创建普通的macOS App(或者即使我创建了iOS App并启用了macOS兼容性),如果主视图将@EnvironmentObject作为数据源,但如果该数据源,则该App可以正常运行是@ObservedObject,应用程序会编译但无法运行,并在ScenDelegate上崩溃。
以Person
的简单模型为例:
class Person: ObservableObject {
@Published var name: String = ""
}
如果我按如下方式创建ContentView(使用@EnvironmentObject):
struct ContentView: View {
@EnvironmentObject var person: Person
var body: some View {
VStack {
Text(person.name)
TextField("Name", text: $person.name)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
...并在场景委托上分配环境对象:
window.contentView = NSHostingView(rootView: ContentView().environmentObject(Person()))
一切正常。但是,如果相反,我将变量Person更改为:
@ObservedObject var person: Person = Person()
我在编译时收到此错误:
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)
我还在使用最新版本的macOS Catalina:19A546d和XCode 11 Beta 7(11M392r)。我在做错什么吗?