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

swiftui - SwiftUI 工作表不会关闭

使用 Swift5.2.3、iOS14.4.2、XCode12.4、

在 SwiftUI中使用.sheet修饰符一开始让我感到很兴奋,因为它似乎是一种显示模态表的简单有效的方式。

然而,在现实世界的应用程序中,事实证明它.sheet几乎可以集成。

这里发现了两个错误:

错误 1:工作表不会偶尔关闭

错误 2:当在工作表的 SegmentPicker 内时,具有 DefaultPickerStyle 的选取器不起作用(请参阅我创建的这个 Stackoverlow-question

现在让我们关注错误 Nr1:“工作表未关闭”:

cmdpresentationMode.wrappedValue.dismiss()应该关闭工作表。它适用于 90% 的情况。但是每隔一段时间,在没有给出原因的情况下,模态表并没有关闭。

这是一个代码摘录:

我还尝试将关闭调用包装在主线程中:

但这并没有帮助。

知道为什么 SwiftUI.sheets不会使用presentationMode来关闭它吗?

在这里,我首先添加了调用工作表的方式。由于从一个更大的应用程序中取出,我显然只在这里展示了一个关于如何调用工作表的示例:

0 投票
0 回答
231 浏览

swiftui - 风格为 DefaultPickerStyle() 的 SwiftUI Picker 不起作用

使用 Swift5.2.3、iOS14.4.2、XCode12.4、

在 SwiftUI中使用.sheet修饰符一开始让我感到很兴奋,因为它似乎是一种显示模态表的简单有效的方式。

然而,在现实世界的应用程序中,事实证明它.sheet几乎可以集成。

这是发现的两个错误(其中包括......):

错误 1:具有 DefaultPickerStyle 的选取器在工作表的 SegmentPicker 内时不起作用

错误 2:工作表不会偶尔关闭(请参阅我创建的这个 Stackoverlow 问题

现在让我们关注错误 Nr1:“在工作表的 SegmentPicker 内时,具有 DefaultPickerStyle 的选取器不起作用”。

我的意思可以在这个例子中得到最好的体现。这是真实世界应用程序的摘录。(是的,我需要放置这么多视图,因为普通的教科书示例工作得非常好 - 但一旦它变得更复杂一点......)。

请注意,“可怕的孩子”真的是这样.pickerStyle(DefaultPickerStyle())!(您会在名为SettingsView.

如果我用 - 替换样式,.pickerStyle(MenuPickerStyle())那么应用程序工作得很好。

有什么问题DefaultPickerStyle()???

请参阅此处说明问题的两个视频:

视频 1:FAULT 显示DefaultPickerStyle()(您会看到.onChange(of: categoryIndex) { (idx) in ...}从未使用此选择器样式调用...)

在此处输入图像描述

视频 2:正确的节目MenuPickerStyle()

在此处输入图像描述

ContentView 如下所示:

InfoSettingsView 如下所示:

InfoView 如下所示:

SettingsView 如下所示:

知道为什么 SwiftUI.sheet的 DefaultPickerStyle() 在上述情况下不能正常工作吗?

0 投票
1 回答
366 浏览

asynchronous - SwiftUI 在多个视图上使用环境对象会导致导航问题

不知道我是否在滥用环境对象的想法,但是在使用发布延迟异步值的环境对象时遇到问题。一个视图导航到下一个视图,但随后“根”被更新,结果导致“回声”,或者即使处理了导航问题。当使用导航之间的转换时,这个问题变得更加明显。是否有正确的使用模式来避免这种情况?或者其他一些解决方案?

任何指导将不胜感激。

附上一个精简的样本来说明问题。

Xcode 12.4 IOS 14.1

0 投票
3 回答
830 浏览

swift - 在 SwiftUI 中的非视图类之间传递环境对象

我知道EnvironmentObject属性包装器可用于将对象传递给视图。我有一个会话对象,我将其传递给我的意见。现在我需要将它传递给我的模型类之一(即非视图)。理想情况下,这个模型(接收会话对象)被实例化为StateObject.

上面的代码将不起作用(可以理解),因为:

关于如何在会话中传递的任何建议TransactionsModel

0 投票
0 回答
356 浏览

swiftui - SwiftUI NavigationView 意外弹出到根目录

我创建了一些 SwiftUI 代码,这些代码使用一个EnvironmentObject来存储布尔值以返回到根视图,另一个EnvironmentObject用于存储一个旨在跨多个视图使用的分数变量。

在这个例子中,我有两个游戏,一个红色游戏和一个蓝色游戏。我有.redStacked最初.blueStacked设置为false. 他们各自NavigationLinks将它们设置为true. 在游戏结束时,“主页”按钮将其设置回false,这会将导航堆栈展开回根视图。

我遇到的问题是对分数 EnvironmentObject的任何更新都会意外地过早地将导航堆栈弹出回根视图。

在下面的示例代码中,游戏之间的唯一区别是红色游戏按钮将 +1 添加到其 score 环境变量。在这种情况下,添加了一个点并执行到最终页面的导航链接,但随后它立即橡皮筋回到开头。Blue Game 没有按预期更新 score 环境变量和转换。

我欢迎任何关于为什么会发生这种情况的见解。提前致谢。

0 投票
1 回答
107 浏览

swiftui - 将 `environmentObject` 数据传递给另一个类(单例)

我有一个observableObject包含一些数据的类。

可观察类

我创建并将其SceneDelegate作为environmentObject视图层次结构传递。

场景委托

问题是我有一个与服务器同步的单例类,我需要更新UserManager类中的数据。

单例类

但它根本不起作用。我无法发布单例类的更改。

0 投票
1 回答
97 浏览

ios - SwiftUI:环境对象发布者不会在 onReceive 中发送更新

我有一个网络监视器,我想在状态发生变化时从那里接收通知。
看起来像这样:

我在 Home 中创建了一个网络监视器的@StateObject并通过环境对象发送它。

我希望在ContentView中接收发生的任何更改。

我不明白为什么每当网络状态发生变化时,onReceive都不会触发。

编辑:我正在使用共享实例在 AppDelegate 中开始监控。

0 投票
1 回答
78 浏览

swiftui - 在 SwiftUI 中使用 ForEach(data:,content:) 和 @EnvironmentObject 而不使用尾随闭包语法?

我正在重构我的代码,并希望将成员初始化程序与 ForEach(data:,content:) 一起使用。

我有一个视图模型,其中包含符合 Identifiable 的结构数组:

然后我创建了一个 CellView,它有一个 CellModel 的成员初始化器,还有一个 EnvironmentalObject,它是 ViewModel 的一个实例:

但是,当我创建父视图时,我在 ForEach(data:, content:) 行上收到编译器错误:

我知道这是因为 ForEach(data:,content:) 试图将 EnvironmentObject 和单个模型都传递给每个 CellView,但是有没有办法做到这一点不必使用 ForEach(data:,content:)尾随关闭?:

0 投票
1 回答
193 浏览

ios - SwiftUI ObservedObject 每次都会重新启动

我有一个简单的类来在我的 SwiftUI 应用程序中存储一些数据:

我还将它定义为EnvironmentObject在主应用程序结构中:

在我的内容视图中,我嵌入了一个 UIKit 文本视图:

其中EditorTextViewUITextView通过UIViewRepresentable.

现在,我要做的是在 EditorTextView 中更新 UserData,例如,将一些用户输入存储到UserData.description. 所以我在我的 Coordinator 中定义了如下的类(代码只是示例):

我的问题是:

尽管它使用“我的新文本”进行了更新(如调试器所示),但 的值userData.description再次使用值“初始文本”重新启动。就像每次都创建 UserData 类一样。

我尝试使用@StateObject 而不是@ObservedObject,但这并没有什么不同。

0 投票
2 回答
81 浏览

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

此处出错 - selectedTab = tab.getTab()

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

也试过这个 - https://www.hackingwithswift.com/forums/swiftui/fatal-error-no-observableobject-of-type-order-found/3208

}