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

swiftui - SwiftUI:在 Xcode 12/iOS 14 中使用环境对象(--> 如何/在哪里放置对象在环境中?)

在编写我的第一个 iOS 应用程序的过程中,我遇到了一个到目前为止我无法找到解决方案的新问题:我想使用环境对象将信息传递给各种视图。

我知道对此有很多解释和教程(例如,在 hackingwithswift.com 上:https ://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-意见

但是,根据我目前的理解,这些教程的全部似乎都在使用 Xcode 12 中不存在的“场景委托”。

因此,我正在努力研究如何/在哪里放置环境对象在我的应用程序环境中以及如何将其连接到我的内容视图/其他视图。

将此代码段放在哪里?它是否进入内容视图?

有人能帮忙解决这个问题吗?我会很感激 :)

0 投票
2 回答
240 浏览

swift - 无法从 @Published ObservableObject 或 @EnvironmentObject 变量获取要更新的 SwiftUI View 对象

我已经进行了大量搜索并阅读了一堆文章,但我无法让 SwiftUI 根据模型中不断变化的变量动态更新视图,至少我正在做的事情是这样的。基本上我想根据应用程序的UNNotificationSettings.UNAuthorizationStatus. 我让应用程序在启动时检查状态并显示状态。如果未确定状态,则点击文本将触发请求通知对话框。但是,在用户允许或拒绝通知后,视图不会更新。我确定我错过了一些基本的东西,因为我已经尝试了十几种方法,包括 with @Published ObservableObject, @ObservedObject,@EnvironmentObject等。

编辑:我尝试添加 objectWillChange 但视图仍未更新。

0 投票
1 回答
31 浏览

arrays - 如何绑定列表视图

我有一个 CoordinateList 视图,它显示了已输入的 CoordinateRow 视图的列表,并且可以就地编辑(在列表视图中)。要将新点添加到列表中,用户按下列表底部的按钮,它会添加一行(无需转到另一个屏幕)。如何让它更新视图以显示这个新条目?我尝试用一​​个函数包装坐标列表的附加函数,以便在添加到列表时可以调用 objectWillChange.send() ,但它似乎没有做任何事情。

我想我没有足够的声誉来上传图片,但这是一张图片:

演示

0 投票
1 回答
267 浏览

swiftui - 如何在没有 SceneDelegate 的情况下在 SwiftUI 中设置 EnvironmentObject?

我想使用新的 App Protocol @main --> NO Scene 或 AppDelegate 在 SwiftUI 中设置 EnvironmentObject。我是否可以在我的内容视图中设置 EnvironmentsObjects,而不是我的 @main .swift ?如果是的话?为什么我不能在我的 NavigationLink 中传递环境对象(如您所见),而 Swift 想让我手动输入数据,我想传递给 LoadingPage()。

十分感谢 !

在我想在 NavLink 中调用 LoadingPage() 的 TextPage() 上

0 投票
0 回答
165 浏览

swiftui - 将 UIWindow.rootView 转换为 UIHostingController其中有环境变量

将 UIWindow.rootView 转换为托管控制器,例如:

工作正常,除非它有environmentObjects.

由于 myMainTabView已被初始化.environmentObject,因此我无法将其强制转换为UIHostingController<MainTabView>.

当我尝试 printrootView的类型时,Xcode 告诉:

我想是:

但我无法到达_EnvironmentKeyWritingModifier

有人有想法吗?

0 投票
0 回答
78 浏览

swiftui - SwiftUI - 在 UITests 中找不到 EnvironmentObject

我试图在我的 UITests 中使用 @EnvironmentObject,但在运行时出现错误。

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

不工作

以下代码在运行 UITest 时会引发上述错误。

用户界面测试

当前替代方案:全局变量

下面的代码工作得很好。

我的目标

我的目标是远离全局变量的使用,因为它们是代码异味。我正在尝试解决我的代码异味。

我正在寻找的答案可以是:

  1. 允许在我的 UITests 中使用 @EnvironmentObject 的解决方案!
  2. 关于为什么这是不可能的解释和/或全局变量和@EnvironmentObject 的替代解决方案,它可以工作,看起来很干净并且不是不同的代码气味。
0 投票
0 回答
97 浏览

swiftui - SwiftUI:传递给子视图的状态没有收到更新?

我有MasterView一个列表。
通过单击一个项目,将DetailView显示 。
我正在以标准的 SwiftUI 方式通过NavigationLink.

我将detailStateDetailView 作为参数传递。

我期待在DetailView显示屏幕时,对 的任何更改detailState仍会触发对 DetailView 的更新。
(首先显示“正在加载...”屏幕,然后在完全加载时显示数据)

但这似乎没有发生。
如果detailState值更改,则不会触发视图更新。
(数据完全加载后仍然显示“正在加载...”消息)

这里是定义源对象的地方:

什么是最好的设计来确保DetailView对变化做出反应detailState

0 投票
2 回答
312 浏览

ios - 无法使用@EnvironmentObject SwiftUI 更新先前视图上的文本

我是 SwiftUI 的新手。所以,我正在练习并创建某种收银应用程序,在这里我被困了一段时间。在ProductPageView我可以增加和减少项目的数量。然后,当我去DetailOrderView(如购物车视图)时,我也可以增加和减少数量。印刷品正确显示数量。但如果我回到ProductPageView,标签不会自行更新。

看看这个截图:

首先,我添加 2 个项目。

在此处输入图像描述

然后我去DetailOrderView,数量是一样的:

在此处输入图像描述

然后我添加 2 件商品DetailOrderView(所以现在是 4 件商品)并返回到ProductPageView,请注意总价如何增加但数量没有变化。我觉得我想在此页面上“刷新”或“重新加载数据”。

在此处输入图像描述

当我按下后退按钮时,如何解决这个问题并更新文本?

这是我的代码:

主要的

}

产品页面视图导入 SwiftUI

}

详细订单视图或购物车视图导入 SwiftUI

}

主持人

产品行

PS:我删除了样式以使代码更短。

先感谢您

0 投票
0 回答
36 浏览

swiftui - @EnvironmentObject 不会更新 SwiftUI 中的 UI

我试图使用@EnvironmentObject 在视图之间传递数据,但不知何故我的 UI 没有更新。我可以看到我可以在打印时在数组中获取新数据,但 UI 没有更新我在哪里出错了。

这是我更改 environmentObject 数组的地方

这是我想使用更改数组的地方。

这是我的 viewModel ;

0 投票
2 回答
650 浏览

swift - 如何在 SwiftUI 的应用程序文件中使用 EnvironmentObject

是否可以将应用程序文件中的 EnvironmentObject 用于新的 SwiftUI 2.0 项目?
我正在使用以下代码,但出现错误:

致命错误:未找到身份验证类型的 ObservableObject。用于身份验证的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。:文件 SwiftUI,第 0 行

我假设此错误是因为我尚未在任何视图中使用 .environmentObject 修饰符,因此尚未将 UserAuth 放置在环境中。

但是我希望这个 loginStatus 在我的应用程序中的任何地方都可用,并且能够在我的应用程序的任何地方在 UserAuth 类的一个常见实例上使用函数 getLoginStatus。

我希望把它放在我的 rootView 中并让它适用于所有视图,但不知道如何使用我的应用程序文件中的结构来做到这一点。