3

如果我使用带有 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)。有什么我做错了吗?

4

0 回答 0