问题标签 [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 回答
30 浏览

swiftui - 如何解决“环境对象”这个问题?

//环境对象类

致命错误:未找到 AppData 类型的 ObservableObject。AppData 的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。

0 投票
0 回答
86 浏览

ios - 如何将环境对象从视图共享到其视图模型?

我正在使用 DataStoreenvironmentObject在我的应用程序周围传递数据,但是我需要为视图创建特定的 View Model 类,但我需要能够将 my 的实例传递dataStore给 myWorkoutDetailViewModel但可以想不出办法。我尝试将它作为参数传递给WorkoutDetailViewModel,但编译器抱怨Cannot use instance member 'dataStore' within property initializer; property initializers run before 'self' is available。我还能怎么做?

0 投票
1 回答
211 浏览

swift - SwiftUI - 在 ObservableObject 类/依赖注入中使用 EnvironmentObject

我在 @ObservableObject 类中使用 @EnvironmentObject 时遇到问题。根据一些研究,这是不可能的,因为 EnvironmentObject 仅用于视图。

我已采取以下措施,但该值不会动态更新。

例如,它是用“A”的值初始化的,但是当我在使用 EnvironmentObject 的类中更改值时,在我的 ObservableObject 类中找到的值仍然是“A”。它在使用@EnvironmentObject 的所有其他位置更新,而不是 ObservableObject API 类。

当 EnvironmentObject 更新发布的变量时,有没有办法让 ObservableObject API 类中的代码更新?

需要在其中像 EnvironmentObject 一样操作的变量的类是 API 类。

我在这里到底做错了什么?

0 投票
0 回答
155 浏览

ios - Swift UI 更新 @EnvironmentObject 阻止 @StateObject 上的其他更新

我使用工具栏中的按钮ModalView由父视图打开了以下视图ParentView

** 父视图 **

** 模态视图 **

** 总店 **

问题是,模态视图中的保存按钮执行的操作不会关闭模态(即使它正确更新了布尔变量和 Env_Obj)。

似乎与工具栏有关......事实上,如果我删除导航视图和工具栏,将按钮直接放在堆栈中......它可以工作......

在 Parent2View 中,我删除了 NavigationView 并在 Text 属性之后直接在视图中配置了按钮。它正在按预期工作。

更新 好的,我终于找到了解决方案。问题是工具栏。如果将 ParentView 修改如下,则一切正常

谢谢!克里斯蒂安

0 投票
1 回答
52 浏览

swiftui - SwiftUI 更改环境对象在同一视图中重新创建观察对象

所以,我有几个步骤,最后一个包含EnvironmentObjectObservedObject。问题是,当我尝试修改EnvironmentObject (车道 68) 时,它会重新创建ObservedObject。谁能解释我为什么会这样?有什么解决方案可以让我的ObservedObject保持原始状态?

据我所知,可以将 ObservedObject 更改为 StateObject,但我使用的是 iOS 13+,所以......我需要其他解决方案。

在此处输入图像描述

0 投票
1 回答
60 浏览

swift - 如何让我的按钮反映我的 EnvironmentObject 的布尔值?

我正在尝试使用 an@EnvironmentObject来跟踪几个对象数组的 Bool 状态,但是我遇到了超出范围的索引并且无法弄清楚原因。

我正在尝试跟踪在三个容器之间进行选择的“查询”。每个容器都有一组“框架”,我需要切换这些框架并更改按钮标签的颜色:

我也有我的颜色在一个数组中:

然后我有一个选择器可以像这样在容器之间切换:

最后,这是我的内容视图:

我期望做的是,当我使用选择器进行选择时,容器的布尔值都设置为 TRUE。然后点击按钮切换该容器中的框架。并且当使用选择器选择另一个容器时,新容器的框架都是 TRUE。此外,如果所有布尔值都变为 FALSE,则它们会自动重置为全部 TRUE。

如果我将三元颜色更改为一种颜色,一切正常。我的打印语句显示了正确的更改。但我无法让 UI 正确更新。

截屏

0 投票
1 回答
41 浏览

swiftui - SwiftUI:如何将值传递给另一个视图?

我在这里要做的是将“KarvonenVal”传递给另一个 SwiftUI 文件中的不同视图。我尝试过使用 .environmentObject 和 observableObject,但它们都不起作用。我的目标是在 SummaryView 上显示 KarvonenVal。感谢您的帮助。

值来自

到这里

0 投票
1 回答
127 浏览

swiftui - SwiftUI - 如何使用 ObservedObject 或 EnvironmentObject 存储 GeometryReader 数据?

我正在尝试遵循为应用程序创建的设计,该应用程序在屏幕中间放置了一些对象。

对象的大小和填充应与设备的屏幕尺寸成比例,这意味着如果屏幕大于我们在设计中作为基础的屏幕(在本例中为 iPhone 11 屏幕),它们应该看起来更大。另外,这些物体里面的物体比较多,也应该和屏幕大小成正比。例如:放置在 RoundedRectangle 边框内的 Text 视图,如果屏幕大于用作基础的屏幕,则字体应该增长;或另一个图像中的图像。在这些示例中,对象及其内部的对象都应与屏幕尺寸成正比。

到目前为止,我们正在使用 GeometryReader 来完成这项工作。我们这样做的方式需要我们在为屏幕及其视图定义的每个文件中使用 GeometryReader。一旦我们有了 GeometryReader 数据,我们就使用 Scale 结构来获取对象的正确比例。

这是示例代码:

GeometryReaderSampleView.swift

规模.swift

问题/要求

我想简化此代码并将 GeometryReader 数据(及其信息的 Scale 结构)存储在 ObservedObject 或 EnvironmentObject 中,以便我们可以在整个项目的不同视图和文件中使用它。这样做的问题是,在加载视图之前我们无法获取 GeometryReader 数据,一旦加载了视图,我相信我们不能再声明 ObservedObject 或 EnvironmentObject(正确吗?)。

我知道有一种方法可以在不使用 GeometryReader 的情况下获取屏幕尺寸,如下所示:如何在 SwiftUI 中获取 iPhone 的屏幕宽度?. 但是,如果我使用 GeometryReader 来获取另一个视图内的视图的大小,我希望也存储它的信息。

目标是不在需要使用比例的每个视图中使用此代码:

而是使用 ObservedObject 或 EnvironmentObject 从需要它的视图中获取比例数据。因此,如何使用 ObservedObject 或 EnvironmentObject 来存储 GeometryReader 数据?

0 投票
1 回答
41 浏览

swiftui - Swift 无法添加另一个环境视图

我有一个运行良好的环境对象,但后来我添加了另一个,当我放最后一点时,它给了我一个错误“不能在属性初始化程序中使用实例成员 'brandViewM';属性初始化程序在 'self' 可用之前运行”和“不能非函数类型'brandViewM的调用值,删除'()''"这里

这是那个环境对象(几乎和 listViewModel 完全一样)

@EnvironmentObject var brandVM: brandViewM在一个视图中显示 ForEach 中的字符串。这个环境对象和我创建的第一个对象之间的唯一区别是 ForEach 需要brandItem符合Hashable,而第一个对象中的Equatable. 任何帮助,将不胜感激。

0 投票
0 回答
147 浏览

swift - 使用 EnvironmentObject 删除视图会导致崩溃 (SwiftUI)

我有一个结构数组,ForEach 使用它来生成子视图。当我从该数组中删除一个对象时,其中一个子视图会按预期消失。但是当我将 EnvironmentObject 传递给 SubView 并且该视图被删除时,应用程序崩溃。顺便说一句,它是一个 Mac 应用程序。

有任何想法吗?