问题标签 [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 投票
0 回答
260 浏览

swiftui - 如何避免致命错误:SwiftUI 中没有 ... 类型的 ObservableObject?

我将事情简化为这个非常简单的示例(一个普通的 SwiftUI 项目,仅编辑 ContentView 和 SceneDelegate 中的一行)。设置一个微不足道的 ObservableObject 和几个屏幕视图。使用最新的 Xcode 11.4 和模拟器很容易崩溃。

难道我做错了什么?或者这是一个 SwiftUI 错误?它最初似乎工作正常,然后重新导航到子视图时它崩溃了。虽然确切的行为是不确定的(可能会在第二次或第三次导航时崩溃!)

0 投票
0 回答
277 浏览

crash - How to check if @EnvironmentObject is set? (SwiftUI)

What I have: View and ViewModel (as extension to View struct).
Both of them are use @EnvironmentObject of type AppState.
The problem is that my preview crashes due to this error:
Fatal error: No ObservableObject of type AppState found.
Commenting out lines in loadUser func saves from crash.

0 投票
1 回答
803 浏览

swift - SwiftUI 致命错误:未找到类型的 ObservableObject

我想在我的应用程序中有一个点,我可以在其中存储一些数据并快速访问它。在 SwiftUI 之前,我只是ApplicationDelegate为了这个目的。在我只需要调用 kind of 之前appDelegate.userService,它为我提供了应用程序中的一个点,该点已初始化一次。没有更多的单例,只是 appDelegate。

现在我找到了这个教程如何使用@EnvironmentObject

我在这里添加了这段代码来初始化我的 userService:

在我看来,我也有这段代码:

在上面,LoginView我有一个通过电子邮件从服务器获取用户的功能:

但是当我尝试调用getUser函数时,我得到了这个错误:

这是我的用户服务:

主要问题是如何解决上述问题?

我也有附带问题:

  1. 我是否需要设置这个环境单例对象(@EnvironmentObject)或者最好像以前一样使用 AppDelegateappDelegate.userService并将所有需要的数据存储在那里,我看不出这个东西有什么好处。
  2. 如果有一些优势,我是否需要创建用户服务,ObservableObject因为对我而言,用户服务更多的是关于执行某些功能(获取用户数据、更新服务器上、本地存储中的用户数据等),而不是数据模型层我们需要观察。这里完全糊涂了。在我上面提供的链接中,Paul 将其ObservableObject用于应用程序设置,但不确定这是否正确。
  3. 在我的示例中,我尝试从服务器获取用户并在获取后更新用户服务中的用户,这是正确或干净的设计代码还是我想多了?
0 投票
2 回答
882 浏览

swiftui - Swiftui:@environmentObject - 不能在属性初始化器中使用实例成员;属性初始化程序在“自我”可用之前运行

我尝试将数据从 @environmentObject 传递到 TopLevel 中的 @State 对象

但我收到此错误:“不能在属性初始化程序中使用实例成员;属性初始化程序在‘self’可用之前运行”

themeData 数组应该从环境对象中获取 Int。

我该如何解决这个问题?

0 投票
0 回答
142 浏览

swift - 斯威夫特用户界面。如何保持 VIPER 协议添加 EnvironmentObject?

我正在尝试将 VIPER 架构与 SwiftUI 一起使用,使用一些我已经在 UIKit 中使用的协议。

这些是我的BasePresenterAssembler实现:

在我想添加环境对象之前,它与 SwiftUI 视图一起工作得很好。

问题是,如果我以这种方式添加它:

当我尝试修改它时应用程序崩溃

作为该视图的祖先,可能缺少一个View.environmentObject(_:)forUserModel

我试图将环境对象注入更改为视图的初始化,但是它不再是类型LoginView(它是ModifiedContent<...>)并且汇编程序崩溃了。

知道我可以用什么来组装我的模块并使 environmentObject 选项起作用吗?

0 投票
1 回答
111 浏览

swift - 有没有办法在 SceneDelegate 中初始化 CoreData 和 EnvironmentObject?

如何在 scenedelegate 根视图中初始化 managedObjectContext 和 .environmentObject ?

我尝试了此代码的所有变体 - 它不起作用:

谢谢你的帮助!

0 投票
1 回答
913 浏览

ios - 如何使用从类函数编辑环境对象?

我是快速编程的新手。我试图通过专门通过类函数更改环境对象的值来使用环境对象来更新视图。我在 contentview 中有两个子视图,因为我希望在 UserData 环境对象中更改字符串时查看两个子视图是否一起更新。

但是,有一个错误提示“线程 1:致命错误:未找到 UserData 类型的 ObservableObject。可能缺少 UserData 的 View.environmentObject(_:) ...'

在 SceneDelagate.swift 中,我注入了环境对象:

用户数据.swift

StringGenerator.swift

SubView1.swift

SubView2.swift

内容视图.swift

一般来说,我想知道如何通过类函数改变环境对象。

代码在我运行时崩溃。这里有什么问题?

0 投票
1 回答
208 浏览

swiftui - 如何从类而不是视图更改@EnvironmentObject

我有一个带有两个子视图的 TabView - PageOneView 和 PageTwoView。我还在 SceneDelegate 中初始化了一个 @EnvironmentObject 数据。对于 PageOneView 和 PageTwoView,我还有一个嵌套子级。对于 PageTwoView,嵌套的子视图也是一个视图,在其中我可以访问和修改 @EnvironmentObject,并且所有顶级视图(PageOneView 和 PageTwoView)都反映了更改。但是对于 PageOneView 嵌套的子级是一个类,而不是一个视图,当我尝试在 PageOneView 的子级中修改它时,我得到一个错误:线程 1:致命错误:没有找到数据类型的 ObservableObject。作为此视图的祖先,Data 的 View.environmentObject(_:) 可能会丢失。有没有办法从不是视图而是类的嵌套子对象中更改@EnvironmentObject?

0 投票
1 回答
989 浏览

swiftui - 从 UIViewControllerRepresentable 对象访问 @Environment 对象

我使用这种方法将相机与 swiftUI 结合起来: https ://medium.com/@gaspard.rosay/create-a-camera-app-with-swiftui-60876fcb9118

UIViewControllerRepresentable 由 PageFourView 类实现。PageFourView 是父 View 的 TabView 之一。我@EnvironmentObject从 SceneDelegate 传递到父视图,然后传递到 PageFourView。但是当我试图@EnvironmentObject从 PageFourView 的 makeUIViewController 方法访问时,我得到一个错误:

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

...即使我可以从 context.environment 中看到 @Environment 对象。这是我的代码:

这是从中调用 PageFourView 的父视图:

0 投票
1 回答
68 浏览

swift - How to bind data between views using @EnviromentObject?

I’m practicing how to bind data using @EnvironmentObject by making a simple practice app. The main view of the app is a simple list with a title in each cell. By clicking the cell, it will present the detail view. In the detail view is a TextField that can change the title of the cell in the main view. I can’t figure out how to bind the textField with the title of the cell.