【问题标题】:Can't use @ObservedObject on real iPhone无法在真实 iPhone 上使用 @ObservedObject
【发布时间】:2019-08-08 22:48:38
【问题描述】:

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

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

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

上崩溃

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

【问题讨论】:

  • 您的NetworkManager 不符合ObservableObjectHere 是一个使用 MMVM 和 Combine 的示例存储库。我认为您只需要添加let objectWillChange = PassthroughSubject<NetworkManager,Never>() 并在设置数据时调用它。

标签: ios swift iphone swiftui xcode11


【解决方案1】:

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

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

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

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

@EnvironmentObject private var networkManager: NetworkManager

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

ContentView()
    .environmentObject(NetworkManager())

【讨论】:

  • 您可以通过调用 .wrappedValue 而不是 .value 来修复presentationModes关闭
  • 我从没想过要尝试这个。谢谢!
  • 我已经尝试谷歌这个问题很久了!谢谢!
  • XCode 11 beta 6 无法解决我的 iPhone iOS 13 beta 7 上的问题。我尝试了 EnvironmentObject 解决方案,但它只会产生其他运行时错误。
  • @K.Law 如果您遇到无法通过删除@ObservedObject 实例解决的崩溃问题,那么您遇到的问题可能完全是另外一回事。我建议您发布一个新问题,以便我们查看您遇到的错误。
【解决方案2】:

使用 Xcode 11 beta 6 更新您的项目。这解决了这个问题。我可以用我正在开发的应用程序来确认它。今天终于出来了!

【讨论】:

  • 您是否在手机上运行该应用程序?我的代码可以在 iPad 上运行,但不能在手机上运行。
  • 是的,它确实可以在手机上运行。我正在安装了 beta 的 iPhone 8 上进行测试。
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多