不能在真正的 iPhone 上使用 @ObservedObject [英] Can't use @ObservedObject on real iPhone

查看:20
本文介绍了不能在真正的 iPhone 上使用 @ObservedObject的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当它在其中使用 @ObservedObject 时,我无法显示我的视图.该应用程序在我尝试呈现时崩溃并出现此错误:

i can't get my view to appear when it uses @ObservedObject in it. The app crashed when i try to present it and i get this error:

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

Thread 1: EXC_BAD_ACCESS (code=1, address=0x9)

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

The app runs fine on the simulator. It only crashes on my

iPhone 6s iOS 13 测试版 6

Xcode 测试版 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

推荐答案

这不是不符合 ObservableObject 的问题.您提供的代码适用于画布和模拟器,也应该适用于设备.我已经在我自己的项目中使用 iOS 13 Beta 6 遇到了这个问题,并花了很多时间进行故障排除.

This isn't a problem with not conforming to ObservableObject. The code you provided works in the canvas and in the simulator, and should also work on the device. I have already come across this issue with iOS 13 Beta 6 in my own project and have spent a lot of time troubleshooting.

在运行 iOS 13 Beta 6 的设备上运行使用 Xcode Beta 5 构建的项目时,其他事情(例如调用 self.presentationMode.value.dismiss() 以关闭模式视图)目前也被破坏. 之前的 Xcode 测试版存在问题,无法在较新的 iOS 测试版上运行,这可能是相同的问题.

Other things (such as calling self.presentationMode.value.dismiss() to dismiss a modal view) are also currently broken when running projects built with Xcode Beta 5 on devices running iOS 13 Beta 6. There have been issues with previous betas of Xcode not working on newer betas of iOS, and this may be the same issue.

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

I would suggest that you wait until Xcode Beta 6 is released to make any significant structural changes to your code, as iOS 13 Beta 6 may have been developed in anticipation of handling changes that will be made in Xcode Beta 6.

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

That being said, if you absolutely must make changes to workaround this issue in the meantime, I've found that using @EnvironmentObject instead of @ObservedObject fixes this issue. In your example, that would mean declaring your property like this:

@EnvironmentObject private var networkManager: NetworkManager

然后,当您创建视图时,您可以将 NetworkManager 作为环境对象传递,如下所示:

Then, when you create your view, you can pass a NetworkManager as an environment object like this:

ContentView()
    .environmentObject(NetworkManager())

这篇关于不能在真正的 iPhone 上使用 @ObservedObject的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆