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

4

当我在视图中使用@ObservedObject时,我的视图无法正常显示。当我尝试展示它时,应用程序会崩溃并显示以下错误:

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

该应用程序在模拟器上运行良好。但只有在我的iPhone 6s iOS 13 beta 6Xcode 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

你的 NetworkManager 没有符合 ObservableObject 的协议吗?这里 是一个使用 MMVM 和 Combine 的示例仓库。我认为你只需要添加 let objectWillChange = PassthroughSubject<NetworkManager,Never>() 并在数据设置时调用它即可。 - DoesData
2个回答

10

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

其他一些事情(例如调用self.presentationMode.value.dismiss()来关闭模态视图)在使用Xcode Beta 5构建的项目在运行iOS 13 Beta 6的设备上也被破坏了。此前,Xcode的早期测试版本可能无法在更新的iOS beta上工作,这可能是同样的问题。

我建议您等待发布Xcode Beta 6再对代码进行重大结构更改,因为iOS 13 Beta 6可能已经开发以处理将在Xcode Beta 6中进行的更改。

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

@EnvironmentObject private var networkManager: NetworkManager

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

ContentView()
    .environmentObject(NetworkManager())

2
你可以通过调用 .wrappedValue 而不是 .value 来解决 presentationModes dismiss 的问题。 - SwiftiSwift
1
我从来没有想过尝试那个。谢谢! - graycampbell
XCode 11 beta 6 对我的 iPhone iOS 13 beta 7 问题没有解决。我尝试了 EnvironmentObject 解决方案,但只会产生其他运行时错误。 - K. Law
如果您遇到的崩溃问题不是通过删除@ObservedObject实例解决的,那么您遇到的问题可能完全是其他原因引起的。我建议您发布一个新问题,以便我们可以看到您遇到的错误。 - graycampbell
问题是由ObservedObject引起的。EnviromentObject没有帮助我,它会产生这个错误:Thread 1: Fatal error: No observable object of type MYLocationManager.Type found. 我刚刚安装了iOS 13测试版8,但错误仍然存在。 - K. Law
显示剩余3条评论

3

使用Xcode 11 beta 6更新您的项目。这个版本修复了问题。我可以通过我正在开发的应用程序进行确认。终于在今天发布了!


你是在手机上运行这个应用程序吗?我的代码可以在iPad上运行,但不能在手机上运行。 - K. Law
是的,它可以在手机上运行。我正在iPhone 8上测试已安装的beta版本。 - Nick Perkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接