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

时间:2019-08-08 22:48:38

标签: ios swift iphone swiftui xcode11

在其中使用@ObservedObject时,无法显示我的视图。当我尝试展示它时,应用崩溃了,并且出现了这个错误:

  

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

该应用在模拟器上运行良好。它只会在我的

上崩溃

iPhone 6s iOS 13 beta 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

3 个答案:

答案 0 :(得分:9)

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

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

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

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

@EnvironmentObject private var networkManager: NetworkManager

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

ContentView()
    .environmentObject(NetworkManager())

答案 1 :(得分:3)

使用Xcode 11 beta 6更新项目。这可以解决此问题。我可以通过正在使用的应用来确认。今天终于出来了!

答案 2 :(得分:1)

iOS beta 7似乎也无济于事。我认为您需要等待Xcode 11 beta 6才能看到此问题。