如果我使用带有 SwiftUI 的默认模板创建一个普通的 macOS 应用程序(或者即使我创建了一个 iOS 应用程序并启用 macOS 兼容性),如果主视图具有 @EnvironmentObject 作为数据源,但如果数据源是 @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)。有什么我做错了吗?