我什至不完全确定如何写这篇文章,或者提供什么代码来帮助其他人确定问题所在。我刚刚将我的 XCode 更新到了最新版本,并再次构建了我的应用程序,而没有对我在上一个版本上所做的先前构建进行任何更改。突然之间,在这个最新版本中,当我试图导航到我的应用程序的一部分时,我不断收到一个 fatal error 。
我有一个名为 profile 的 EnvironmentObject,它是在用户登录应用程序时生成的。正如人们所期望的那样,我经常使用它来检索用户数据。有问题的确切 View 是我的个人资料 View ,它基本上完全基于个人资料数据。我知道EnvironmentObject 定义并创建成功,因为登录后的登陆 View 利用这个对象进行点点滴滴。但是,要访问配置文件,您必须导航到 UI 的特定部分,这是到配置文件的 NavigationLink。
当我在最新版本的 XCode 中点击此导航链接时,它会抛出一个 fatal error ,告诉我环境对象所派生的可观察对象不存在,从主着陆 View 加载的事实可以明显看出,错误的。为了具体说明错误,它会打印到控制台
No ObservableObject of type ProfileFetcher found. A View.environmentObject(_:) for ProfileFetcher may be missing as an ancestor of this view.: file SwiftUI, line 0
当然,这个错误是不正确的,因为这个可观察对象确实存在,并且在它之前的 View 中使用。
我什至试图让 View 不依赖于对象,只是尝试通过使用变量将配置文件对象数据传递到 View 上,但无济于事。
就像我说的,这个构建与所有这些代码完全一样,它在 XCode 的最新版本上运行得非常好,而且现在我的应用程序由于一些错误而被破坏的事实非常令人气愤,我不知道该怎么做修复它,因为环境对象附加到我拥有的每个基本 View ,而不仅仅是配置文件 View 的祖先,所以我知道这不是真的。
除了等待下一次更新并希望它能解决这个问题之外,我真的不知道该怎么做,因为这个对象几乎用于我拥有的每个 View 中。
最佳答案
发布答案感觉很快,但我想通了,也许我没有阅读补丁说明是我的错,因为它们改变了关于在 subview 中使用环境对象的一些内容。现在,当您调用另一个使用环境对象的 View 的导航链接时,您必须使用 NavigationLink(destination: ProfileView().environmentObject(profile)) 将其与 View 一起传递。如果不这样做,您将收到与我相同的错误。希望这对某人有所帮助。
关于ios - XCode 11.4.1 补丁后 Swift 应用程序无法找到 ObservableObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61531415/