无法在真实 iPhone 上使用 @ObservedObject

Posted

技术标签:

【中文标题】无法在真实 iPhone 上使用 @ObservedObject【英文标题】:Can't use @ObservedObject on real iPhone 【发布时间】: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 不符合ObservableObject? Here 是一个使用 MMVM 和 Combine 的示例存储库。我认为您只需要添加let objectWillChange = PassthroughSubject<NetworkManager,Never>() 并在设置数据时调用它。 【参考方案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 上进行测试。

以上是关于无法在真实 iPhone 上使用 @ObservedObject的主要内容,如果未能解决你的问题,请参考以下文章

在没有苹果开发者计划和任何证书的真实设备上构建和部署 Iphone App

无法在 iPhone 11 pro 上运行 ActionAndVision 示例

Unity 广告无法在真实设备上运行

通用链接在真实设备上不起作用

无法使用 appium 1.6.0 在 IOS 10 真实设备中启动 ipa 文件

在 iOS 上使用 Swift 多次调用 Firebase 'Observe'