问题标签 [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.
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 中:
ios - SwiftUI 通过引用一个类对象到另一个视图
我正在尝试学习 SwiftUI,我将开发一个带有选项卡视图的简单应用程序,并在这些视图之间共享核心运动数据。
主要思想是创建一个运动管理器对象(如这里)并在所有视图中使用传感器值。
ContentView.swift
:
View1.swift
:
View2.swift
:
View21.swift
使用这些代码,我可以使用 中的传感器数据View21
,但无法访问上述层次结构中视图中的数据。
此外,我@ObservedObject
在 ContentView 中创建(如此处)并将其传递给所有视图。我的应用程序在模拟器中工作,但它不在真实设备上。我可以看到传感器数据发生变化,但无法切换选项卡视图。我尝试使用@EnvironementObject
而不是@ObservedObject
,但行为是相同的。
对于我的问题的任何帮助和提示,我将非常感谢。最良好的祝愿
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 中的变量吗?如果是这样,有没有办法设置自定义获取和设置?
swift - 在 Xcode 12 的 SwiftUI 项目中使用 ViewRouter
我尝试在新的 Xcode 12 项目中使用此方法(请参阅附加链接)作为为 SwiftUI 应用程序创建登录页面的一种方式,但我遇到了不知道要添加到主 App 结构中的内容的问题。我仍然是初学者,并尝试ContentView().environmentObject(ViewRouter())
在主应用程序结构中添加 WindowGroup。我完全错了还是为什么 Xcode 不构建视图?有人可以帮忙吗?在工作代码片段下方:
现在我想用 Xcode 12 样式替换 SceneDelegate,但以下不起作用。知道为什么吗?
ios - @EnvironmentObject 中的 @Published 属性不会更新我的应用程序的根视图
我正在尝试使用@EnvironmentObject 为我的应用程序创建一个路由器对象。但问题是更新根视图类型时,@Published 属性不会更新根视图。
它应该如何工作
- 用户单击“使用 Apple 登录”按钮
- 当用户成功登录时,更新@EnvironmentObject 的 router.currentPage 属性。
- 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 按钮时不起作用。
swift - 无法将“TaskElement”类型的值转换为预期的参数类型“EnvironmentObject”'
我已将我的 TaskElement 模型设置为能够编辑任务的 environmentObject。我确实喜欢这样做,以便能够在同一页面上编辑任务以创建新任务。这称为NewTaskView。顺便说一句,我在这个 NewTaskView_Previews 中也遇到了一个错误,但我认为一旦我能理解以下两个错误原因,我就可以自己解决它。
但是进行此更改时会出现以下错误。
和
我在这里先向您的帮助表示感谢。如果您想查看整个项目,可以访问https://github.com/m3rtkoksal/TaskManager
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 的调用方式
swift - SwiftUI 防止 onReceive 在加载时触发
当我尝试接收的变量是@EnvironmentObject 的@Published 属性时,当视图最初加载时,有什么方法可以防止 onReceive 触发?
这是视图:
这是环境对象:
并输出:
我猜第一个是在注入环境对象时触发的。有什么方法可以防止这种情况(除了我在 onAppear 中设置的一些 hackish bool)?理想情况下,我只想看到“来自 onReceive: World 的Hello”这只是一个简单的例子。在我的实际应用程序中,我正在从 onAppear 中的服务获取数据,在我的环境对象中,我有一个错误状态,当清除时,我希望它触发 onReceive 执行一些其他逻辑,然后重新获取。
swiftui - 获取@EnvironmentObject 到 NSObject 类
我有一个简单的ObservableObject
类,我在 App.swift 文件中初始化并传递给第一个视图:
这很好用,但现在我需要从我的通知代表那里得到它。基本上我有这个:
在我NotificationDelegate
的班级中,我如何访问Counter
我实例化的班级?
ios - 试图访问由另一个场景委托函数在场景委托中创建的环境对象
我在我的场景委托中创建了一个环境对象,并且还想在驻留在我的场景委托中的另一个函数中使用它。代码如下所示:
SceneDelegate.swift
问题是在执行handleIncomingDynamicLink 函数时,环境对象的linkRecieved 变量在contentview 内没有改变(我已经验证该变量在函数运行后确实被更改为true)。非常感谢解决此问题的任何见解!