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

swiftui - Swifui: MacOS App: Fetching Core Data in ContentView OK,但是如何使用 AppDelegate 的结果呢?

对于 MacOS 应用程序,使用 Xcode 11.6 (11E708)、SwiftUI,我在ContentView.swift. 但我不能在里面使用这些数据AppDelegate.swift

构建成功,但print(contentView.order.item)(请参见下文)产生此消息:

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

我错过了什么?

在 ContentView.swift 中:

在 AppDelegate.swift 中:

0 投票
1 回答
2486 浏览

ios - SwiftUI 通过引用一个类对象到另一个视图

我正在尝试学习 SwiftUI,我将开发一个带有选项卡视图的简单应用程序,并在这些视图之间共享核心运动数据。

主要思想是创建一个运动管理器对象(如这里)并在所有视图中使用传感器值。

ContentView.swift

View1.swift

View2.swift

View21.swift

使用这些代码,我可以使用 中的传感器数据View21,但无法访问上述层次结构中视图中的数据。

此外,我@ObservedObject在 ContentView 中创建(如此)并将其传递给所有视图。我的应用程序在模拟器中工作,但它不在真实设备上。我可以看到传感器数据发生变化,但无法切换选项卡视图。我尝试使用@EnvironementObject而不是@ObservedObject,但行为是相同的。

对于我的问题的任何帮助和提示,我将非常感谢。最良好的祝愿

0 投票
2 回答
345 浏览

swift - 环境中的字符串变量只能获取。迅速

我可以在我的环境中获取一个变量,但我无法设置/更新该变量。

我的环境对象如下所示:

我有一个读取 JSON 的加载函数:

let exampleData: [Example] = load("exampleData.json")

这是什么示例格式为:

在我的观点中使用@EnvironmentObject var userData: UserData,我可以显示如下内容:Text(userData.examples[examplesIndex].exampleCondition[0].stringFormat)

但是,我得到一个Cannot assign to property: 'stringFormat' is a get-only property. 当我做:

我如何在我的@EnvironmentObject var userData?

是因为我正在计算 stringFormat 并且设置 stringFormat 的最佳方法是编辑用于计算 stringFormat 的 ExampleElement 中的变量吗?如果是这样,有没有办法设置自定义获取和设置?

0 投票
1 回答
420 浏览

swift - 在 Xcode 12 的 SwiftUI 项目中使用 ViewRouter

我尝试在新的 Xcode 12 项目中使用方法(请参阅附加链接)作为为 SwiftUI 应用程序创建登录页面的一种方式,但我遇到了不知道要添加到主 App 结构中的内容的问题。我仍然是初学者,并尝试ContentView().environmentObject(ViewRouter())在主应用程序结构中添加 WindowGroup。我完全错了还是为什么 Xcode 不构建视图?有人可以帮忙吗?在工作代码片段下方:

现在我想用 Xcode 12 样式替换 SceneDelegate,但以下不起作用。知道为什么吗?

0 投票
0 回答
75 浏览

ios - @EnvironmentObject 中的 @Published 属性不会更新我的应用程序的根视图

我正在尝试使用@EnvironmentObject 为我的应用程序创建一个路由器对象。但问题是更新根视图类型时,@Published 属性不会更新根视图。

它应该如何工作

  1. 用户单击“使用 Apple 登录”按钮
  2. 当用户成功登录时,更新@EnvironmentObject 的 router.currentPage 属性。
  3. RootView 收到更新 router.currentPage 的通知,并根据更新的 currentPage 类型更改根视图。

以下是我的代码。

MainApp.swift

ViewRouter.swift

RootView.swift

SigninView.swift

更新

我想我找到了这个问题的答案。我创建了一个isLoggedIn检查是否Sign in with Apple成功完成的状态。

然后我添加了View Modifier onChange,它正在检查上面 isLoggedIn 的值变化。在里面onChange我分配了一个新值,router.currentPage如下所示。

但我仍然不确定为什么它在关闭 SigninWithApple 按钮时不起作用。

0 投票
1 回答
485 浏览

swift - 无法将“TaskElement”类型的值转换为预期的参数类型“EnvironmentObject”'

我已将我的 TaskElement 模型设置为能够编辑任务的 environmentObject。我确实喜欢这样做,以便能够在同一页面上编辑任务以创建新任务。这称为NewTaskView。顺便说一句,我在这个 NewTaskView_Previews 中也遇到了一个错误,但我认为一旦我能理解以下两个错误原因,我就可以自己解决它。

但是进行此更改时会出现以下错误。

我在这里先向您的帮助表示感谢。如果您想查看整个项目,可以访问https://github.com/m3rtkoksal/TaskManager

0 投票
2 回答
86 浏览

uiscrollview - .onTapGesture 获取滚动视图项数据

我的完整项目在这里https://github.com/m3rtkoksal/TaskManager

我已将 SelectedTask 设为环境对象,如下所示

在我的 TaskElement 模型中,我创建了另一个名为 SelectedTask 的类,如下所示

我正在尝试在滚动视图中获取一个项目并获取其数据以便能够在 NewTaskView 中对其进行修改,如下所示

但是当我点击滚动视图中的一个项目时,我得到一个线程 1 错误@self.selectedTask.appendNewTask(task: task)

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

如果我更改为 ScrollViewTask().environmentObject(self.obser)

然后发生这种情况在此处输入图像描述

这就是我的 TaskFrameView 的调用方式

0 投票
1 回答
623 浏览

swift - SwiftUI 防止 onReceive 在加载时触发

当我尝试接收的变量是@EnvironmentObject 的@Published 属性时,当视图最初加载时,有什么方法可以防止 onReceive 触发?

这是视图:

这是环境对象:

并输出:

我猜第一个是在注入环境对象时触发的。有什么方法可以防止这种情况(除了我在 onAppear 中设置的一些 hackish bool)?理想情况下,我只想看到“来自 onReceive: World 的Hello”这只是一个简单的例子。在我的实际应用程序中,我正在从 onAppear 中的服务获取数据,在我的环境对象中,我有一个错误状态,当清除时,我希望它触发 onReceive 执行一些其他逻辑,然后重新获取。

0 投票
1 回答
93 浏览

swiftui - 获取@EnvironmentObject 到 NSObject 类

我有一个简单的ObservableObject类,我在 App.swift 文件中初始化并传递给第一个视图:

这很好用,但现在我需要从我的通知代表那里得到它。基本上我有这个:

在我NotificationDelegate的班级中,我如何访问Counter我实例化的班级?

0 投票
2 回答
254 浏览

ios - 试图访问由另一个场景委托函数在场景委托中创建的环境对象

我在我的场景委托中创建了一个环境对象,并且还想在驻留在我的场景委托中的另一个函数中使用它。代码如下所示:

SceneDelegate.swift

问题是在执行handleIncomingDynamicLink 函数时,环境对象的linkRecieved 变量在contentview 内没有改变(我已经验证该变量在函数运行后确实被更改为true)。非常感谢解决此问题的任何见解!