一尘不染

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

swift

当它@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

阅读 289

收藏
2020-07-07

共1个答案

一尘不染

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

self.presentationMode.value.dismiss()在运行iOS 13 Beta 6的设备上运行使用Xcode Beta
5生成的项目时,其他情况(例如调用取消模式视图)目前也已中断。以前的Xcode
beta版本存在问题,无法在iOS的较新beta版本上运行,这可能是相同的问题。

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

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

@EnvironmentObject private var networkManager: NetworkManager

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

ContentView()
    .environmentObject(NetworkManager())
2020-07-07