无法在真实 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 示例