问题标签 [observedobject]

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 投票
2 回答
162 浏览

swiftui - 来自 ObservedObject 的数据未在 SwiftUI 视图中呈现

我使用 combine 连接到 REST API,该 API 将一些数据拉入 ObservableObject。整个设置实际上只是 MVVM。ObservableObject 然后在视图中被观察。现在,我遇到了一个似乎无法解决的错误。似乎发生的是视图被绘制了两次。第一次使用 ObservedObject 中的值进行更新。然后它立即重新绘制,但现在拉取的数据突然消失了。我已经确认不会再次执行提取数据的代码。此外,View Hierarchy Viewer 似乎暗示应该在视图中渲染数据的文本视图在第二次渲染运行时以某种方式被删除。

这是模型的样子(身份验证相关代码来自 Firebase):

打印语句的输出是 DONE SINKSUCCESS 两者都只能在调试输出中找到一次。

这是视图:

Print(String(data.items.isEmpty)) 首先是 false,然后是 true,表示视图被重新渲染。

对我来说有点奇怪的是,在拉取数据之前,我希望视图至少呈现一次,但我没有看到任何迹象表明这种情况正在发生。

这两天我一直在努力创造这个词。非常感谢任何帮助和建议!

0 投票
0 回答
49 浏览

swift - @ObservedObject 更改未在异步操作后反映

我是 Swift 的初学者,我根据一些教程粗略地尝试创建一个 MVVM 有点架构但是我发现具有一些 @Published 值属性的@ObservedObject 变量 wallpaperViewModel 并不能反映网络操作后的变化网络操作工作正常,我通过将接收到的值打印到控制台来确认它

这是所需的代码

壁纸视图模型

这是我的主要观点

这是记录到控制台的值

显示网络调用成功的控制台图像

这是模拟器上的输出

模拟器输出

0 投票
0 回答
56 浏览

swift - SwiftUI 更新 EnvironmentObject 中的编写优化

我的 EnvironmentObject 中有一个数组,可以驱动我的一些视图。现在我需要该数组的更新函数。有些元素可能会改变,有些可能不会。

我是否应该首先检查每个元素是否“需要”更新并且只在需要时才写入数组,还是我是否过度考虑它,因为 Swift / SwiftUI 将优化不会实际更改数据的写入操作?

这是一个例子:

或这个...

补充说明: 我试图避免不必要的数据写入和 UI 更新。我的意思是,如果一个数组元素已经是 2.0,我不想通过再次将其设置为 2.0 来将其“更改”为 2.0,并且我当然不想在这种情况下导致重绘。我是否必须自己进行这种避免检查,或者 Swift 是否已经通过优化为我做这件事?

0 投票
2 回答
163 浏览

swift - SwiftUI:ObservedObject/ObservableObject 奇怪的行为

SwiftUI我最近在ObservedObject/中遇到了以下问题ObservableObject

如果ObservedObject/ObservableObject在视图中发布,body则按预期重新计算属性。

但是如果body属性中有一个子 View 也有一个ObservedObject,那么奇怪的是,这个 View 不仅重新计算body了子 View 的属性,而且重新计算了整个object.

状态当然ObservedObject 从子视图中丢失。

当然,您可以通过添加ObservableObject到子视图来防止这种情况.environmentObject(),但我认为这不是最好的解决方案,尤其是对于更复杂的视图层次结构。

这是一个示例代码:

和子视图:

以及示例代码的外观/工作方式:

预览

我意识到的最后一件奇怪的事情,只有当你使用 Observed Object 时才会出现这种情况。如果我将在子视图中@ObservedObject var subViewModel: SubViewModel = SubViewModel()替换@State var counter: Int = 0它,它会再次正常工作并保留状态。

也许我错过了一些东西,但我真的很困惑。我非常感谢任何答案和解决方案。如果您还有其他问题可以发表评论,我会在 24 小时内回复(只要问题是开放的)。

0 投票
1 回答
123 浏览

firebase - SwiftUI / Firebase:我可以使用@Published 向 Firebase 数据库发送和接收单个值吗?

我想获取当前计数以更新到我的 Firebase。

我正在制作一个基本的计数计数器,我希望能够跨设备实时更新(ish)。

Firebase 身份验证已配置并链接到应用程序。

视图的图像

0 投票
1 回答
31 浏览

swift - @ObservedObject 不会在更新数组时得到更新

在我为此失去理智之前。有人请告诉我,为什么它不起作用。我已经花了几个小时来尝试完成这项工作。ObservedObject 只是拒绝更新我的视图。

0 投票
0 回答
97 浏览

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

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

我将detailStateDetailView 作为参数传递。

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

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

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

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

0 投票
2 回答
47 浏览

swift - 我的 ObservableObject 类数组变量“timeStep”无法保存值

我有两个 ObservableObject 类:CarLotData 和 StopWatchManager。我想要做的是使用我的 StopWatchManager 类来加载 CarLotData 属性 timeStep——这是一个数组 Double 类型。

这是我的 StopWatchManager 代码:

这是我的 CarLotData 代码:

最后,这是我的观点,我得到“timeStep = []”,我想要一个 Double 值数组。

其他一切正常,只是我的计时器的值没有转移到我的 timeStep 数组中。任何见解将不胜感激。

0 投票
1 回答
57 浏览

swiftui - 在 NavigationView 动画期间更新观察到的模型会导致导航中止

简单用例:带有“最近”部分的状态列表,显示您最近导航到的那些状态。当点击链接时,动画开始但随后中止,可能是由于详细视图中的 onAppear 处理程序更改了模型的 recents 属性 - 这是由框架观察到的。日志消息表明框架不满意,但不清楚如何让它在添加到最近的延迟前约 2 秒的延迟......

注意:这必须作为应用程序(iPhone 或模拟器)而不是在预览中运行。

0 投票
1 回答
214 浏览

xcode - SwiftUI @StateObject 无法刷新视图

我在 ContentView 页面上看不到 Text 对象的变化。但是,当我在带有打印的 .onReceive 中运行相同的代码时,我可以看到变化。这里有什么问题?

我想从不同的地方管理游戏的状态和从不同的地方运行游戏。我的逻辑错了吗?

枚举

游戏配置

游戏情况

内容视图