问题标签 [environmentobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
82 浏览

ios - SwiftUI:从环境对象内的函数以编程方式关闭模式表

我有一个显示模式表的主视图。由于我有多个模式,我使用 enum 和 State 来控制显示哪个工作表。

在我的主视图中:

设置视图:

在我的 InfoView 表中,我有一个按钮,可以调用 EnvironmentObject 中的函数。在 EnvironmentObject 中完成功能后,如何关闭工作表?

每个视图都链接到同一个 EnvironmentObject 顺便说一句。

谢谢!

0 投票
0 回答
51 浏览

swiftui - 如何在 Swiftui 中使用从 1 个选项卡视图到另一个选项卡视图的数据?寻找方法

我有 2 个选项卡,关联的视图是 tabAView 和 tabBView。在 tabAView 上,有 1 个 API 调用并获得了用户对象,该对象是其 ViewModel 中的已发布对象。ViewModel 名称是 UserViewModel。tabAView 正在观察 UserViewModel。在 tabBView 上,我必须使用该用户对象。因为在某些操作上,用户对象的值发生了变化,这些变化应该反映在后续视图中。

我对这里的环境对象使用感到困惑。请建议什么是最好的方法。

这是更好地理解我的问题的代码。

这是 TabAView:

这是命中 API 和用户对象的 UserViewModel:

下面是 APIService 函数,其中用户对象被保存到 UserDefaults 中以供使用。我知道这是不正确的。(这就是我寻找另一种解决方案的原因)。隐藏 URL,因为它是机密的。

这是另一个 TabBView:

这是 TabBView 中的另一个视图,其中使用了 User 对象。变化没有反映在这里。

结构用户搜索:查看 {

从机密的角度来看,我已经删除了大部分代码,但这段代码将解释原因和错误。请查看代码并帮助我。

0 投票
0 回答
86 浏览

ios - SwiftUi 3.0 - @EnvironmentObject 导致 NavigationLink 弹出

我在 iOS 15 / SwiftUi 3.0 上的一个应用程序中遇到了一个非常奇怪的错误 - 找不到任何信息。

我有一系列 3 个屏幕,每个屏幕都使用标签/选择 NavigationLink 相互链接,如下所示:

$citySelection 是每个后续视图的绑定,以允许应用程序在需要时以编程方式将视图弹回第一个视图。

但是,从 iOS 15 开始,当应用程序从后台启动时会出现非常奇怪的行为。基本上所有视图都会弹回第一个视图。即使我删除了上述所有绑定,它仍然会发生,并且似乎与我的 @EnvironmentObject 之一有关。

这些视图中的每一个都可以访问@EnvironmentObject NotificationHandler - 从应用程序中的许多地方调用通知处理程序以让用户知道正在发生的事情 - 后台处理/api调用等。它非常简单 - 代码如下:

}

我的三个屏幕中的每一个都访问 networkActive 变量来决定是否需要显示进度条:

问题是,当应用程序从后台返回时,如果完全使用了 notificationHandler,应用程序会将所有屏幕弹回第一个屏幕。

如果我从第一个 NavigationLink 视图中删除 @EnvironmentObject,则此行为会停止,但如果没有它,我显然无法使用进度条。在任何其他视图上访问 @EnvironmentObject 不会导致此行为,只会导致第一个。

此外,此行为不会在 iOS 14.5 上发生

任何想法都会非常感激。

谢谢

0 投票
1 回答
52 浏览

swift - SwiftUi 调用中的额外参数在主视图中调用 @EnvironmentObject 的两个视图时

在主视图中调用一个视图环境对象时可以构建成功,但是当我调用第二个视图环境对象时,它会在调用中抛出一个错误额外参数。

0 投票
1 回答
134 浏览

ios - SwiftUI:如何在父视图中初始化新的 StateObject?

我有一个类似于以下(简化)代码的应用程序架构。我使用WorkoutManager StateObject我在设置视图中初始化的 a,然后通过EnvironmentObject. 问题是,在解除后,.sheet没有任何生命周期事件可以初始化一个 new WorkoutManager,我需要它才能连续开始新的锻炼。在下面的示例中,我如何WorkoutView能够重新初始化 WorkoutManager 使其成为一个干净的对象?

0 投票
0 回答
72 浏览

swiftui - 无法预览此文件 - 消息发送失败

我在 xcode 上使用实时预览时遇到问题。该项目构建良好并在模拟器上运行。我已经连接了所有环境对象,所以我有点困惑。是的,我在应用程序文件本身上也有 EO。

“无法在此文件中预览 - 向代理发送显示消息的消息发送失败”

0 投票
1 回答
167 浏览

swiftui - 无法预览此文件 - 向代理显示消息的消息发送失败

我在 xcode 上使用实时预览时遇到问题。该项目构建良好并在模拟器上运行。我已经连接了所有环境对象,所以我有点困惑。是的,我在应用程序文件本身上也有 EO。

“无法在此文件中预览 - 向代理发送显示消息的消息发送失败”

我在 TabBarView 中的每个视图中都使用 AlertSettingsView - HomeView、SearchView、ExploreView 和 OrdersView。使用 AlertSettings 预览提供程序时,一切正常。但是当我尝试预览整个应用程序时,它不再起作用。如果我删除代码下方突出显示的行,则预览效果会很好。

0 投票
1 回答
64 浏览

swiftui - SwiftUI 视图未从 environmentObject 可观察属性更新

我正在将一个 Firestore 数据库连接到我的 UI。

我创建了一个 SignedInAuthentication 对象,我将其设置为环境对象

WorkoutCOmpletionStore 实现如下:

按预期调用快照侦听器。更新了锻炼完成列表(我正在删除和添加对象)。

我遇到的问题是,当 Firstore 更新触发时,WorkoutCompletionDataStore 更新其锻炼完成后,显示这些锻炼完成的视图不会更新。

我错过了什么?

0 投票
1 回答
48 浏览

image - SwiftUI Image 未显示来自变量的 UIImage

我想显示一个存储在 EnvironmentObject 中的图像(类型 UIImage)。此 EnvironmentObject 包含一个包含 UIImage 元素的结构数组。在一个视图中,我想显示这个数组的图像,但这不起作用。

这是结构:

这里是 ModelData 类:

这是主应用程序代码中 modelData 的实例化:

modelData 的内容是从 Firebase 数据库和 Firebase 存储中加载的。这实际上有效,我可以在调试预览中的 modelData.testStruct[...].image 中看到下载的图像。

从一个视图来看,我想引用来自modelData的图像:

有人能帮我吗?我通常对 ObservableObject/EnvironmentObject 和那些东西感到困惑,但我能够在 TextView 中显示例如 modelData.testStruct[0] 的字段“名称”。将 UIImage 传递给 Image 视图是否错误,也许?还是那里需要其他东西?

0 投票
0 回答
38 浏览

ios - 为当前会话使用 ObservableObject 单例类

我正在 SwiftUI 上开发一个 IOS 应用程序,用户可以在其中加入组并与其他用户交互,我很好奇为当前用户的会话使用 ObservableObject 单例类的后果是什么,它将直接替换使用的典型 EnvironmentObject以同样的方式。我想要做的是消除直接将 EnvObj 视图模型注入到后续视图模型中。

因此,而不是这个(在整个应用程序的许多地方发生):

它会变成:

其中 Session 类似于:

如果我知道在初始化 ChildViewModel 时将在此时定义用户,我想我可以创建这个单例类,我可以在用户登录后在应用程序中的任何位置拉取它。

这种实施会产生什么问题?