无法在真正的iPhone上使用@ObservedObject

jsb*_*eJS 5 iphone ios swift swiftui xcode11

使用@ObservedObject它时,我无法显示我的视图。当我尝试显示该应用时,该应用崩溃了,并且出现以下错误:

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)

该应用程序可以在模拟器上正常运行。它只会在我的身上崩溃

iPhone 6s iOS 13测试版6

Xcode Beta 5

那是我的基本代码:

class NetworkManager: ObservableObject {

}

struct ContentView : View {
    @ObservedObject var networkManager: NetworkManager = NetworkManager()

    var body: some View {
        Text("Hi Stack")
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

gra*_*ell 9

不符合不成问题ObservableObject。您提供的代码可以在画布和模拟器中使用,并且也可以在设备上使用。我已经在自己的项目中遇到了有关iOS 13 Beta 6的问题,并花了很多时间进行故障排除。

self.presentationMode.value.dismiss()在运行iOS 13 Beta 6的设备上运行使用Xcode Beta 5生成的项目时,其他情况(例如调用关闭模式视图)目前也已损坏。这可能是相同的问题。

我建议您等到Xcode Beta 6发布后对您的代码进行任何重大的结构更改,因为iOS 13 Beta 6可能是为处理Xcode Beta 6中所做的更改而开发的。

话虽这么说,如果您同时必须绝对更改以解决此问题,我发现使用@EnvironmentObject而不是可以@ObservedObject解决此问题。在您的示例中,这意味着要声明您的财产,如下所示:

@EnvironmentObject private var networkManager: NetworkManager
Run Code Online (Sandbox Code Playgroud)

然后,当您创建视图时,可以NetworkManager像这样传递a 作为环境对象:

ContentView()
    .environmentObject(NetworkManager())
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过调用.wrappedValue而不是.value来修复presentationModes关闭问题 (2认同)