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

ios - SwiftUI 观察到对象在其属性更改时执行操作

我已经观察到在视图中创建的对象,并且我希望具有在对象 bool 属性更改时会发生的功能。我想要类似于 .onTapGesture 的东西。有没有办法做到这一点?具有在该对象之外创建函数主体的功能?

0 投票
1 回答
25 浏览

swift - 工作表内容不会根据参数更新

按下按钮时,我正在调用工作表。该按钮是通过ForEach循环生成的,我想将当前对象传递到新工作表中。根据这个对象,我希望工作表显示不同的变量。

我已经删除了大多数样式以帮助缩短代码。下面是我试图在工作表中运行的代码,但没有得到新的更新事件

每个事件都存储在另一段代码中,链接如下。这样就可以在整个程序中访问它们。

我有要显示的工作表并且该位正在工作,但是它会不断显示相同的数据,并且在我参加新活动时不会更新。任何帮助,将不胜感激。

0 投票
1 回答
59 浏览

ios - 更新 SubView @ObservedObject SwiftUI 后如何更新 ParentView

这是我的案例的一个简单示例。我有一个@ObservedObject viewModel (Object1),将一个属性 (Object2) 传递给另一个视图 (View2)。更改视图 2 中的值,当我返回视图 1 时,我希望该值也更新。什么是最好的解决方案?

在这个例子中,当我按下蓝色数字时,我希望黑色数字也被更新。其实我不知道为什么按下“显示”按钮后黑色数字会更新。如果您能帮助我,我将不胜感激。谢谢。

0 投票
1 回答
223 浏览

ios - 删除 CoreData 项目,这也是 DetailView 中的 @ObservedObject,导致 Swift 5 中的应用程序崩溃

我目前正在使用SwiftUICoreData

情况:我有一个User Detail View和一个Delete Button。按下时,用户的核心数据条目将被删除,应用导航返回到根导航视图,这是所有用户的列表。

问题:每次Delete Button单击应用程序都会崩溃,并显示以下内容Error Message

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[User timeCreated]:无法识别的选择器发送到实例 0x2802ffa40”

我的猜测:我猜这个问题与事实有关,我用 a@ObservedObject Property Wrapper表示User Object (看下面的代码)。这也在 Delete 上更新,这显然会导致一些问题。

问题: 如何删除用户并返回根列表视图而不会导致应用程序崩溃? 注意:显然最简单的解决方案是让用户成为普通属性,但是,我需要自动更新行为,因为还有一个更新用户视图可能会改变一些内容)

谢谢你的帮助。

0 投票
3 回答
102 浏览

swiftui - 为什么@Published 更新文本但不更新列表?

我不明白为什么Text更新,但List没有。

我有一个模型,@Published它是一个日期数组。还有一种从日期生成文本的方法。

这是一个简化版本:

我在我的观点中展示了这段文字。这是一个简化版本:

它有效:当用户从视图中的 UI 向 中添加日期时model.selectedDates,摘要文本会正确更新。


现在我想用行列表替换文本。

我改变方法:

并改变观点:

但这不起作用:列表中根本没有文本,当用户将日期添加到model.selectedDates.

我究竟做错了什么?

0 投票
1 回答
192 浏览

core-data - 如何处理作为 @ObservedObject 的 CoreData 实体的副本(或者我需要这样做吗?)?

就我而言,我有一个ContactProfile要更新的视图。我认为制作联系人实体的副本,编辑副本,然后将副本的属性“粘贴”回原始实体,然后将其保存在managedObjectcontext.

到目前为止,我的代码仅tempContact引用了原始联系人。这是有道理的,因为原始联系人是 CoreData 生成的类,而不是结构。

解决这个问题的最佳方法是什么?还是我想太多了?本身是否@ObservedObject足以进行编辑,因为直到通过private func saveContext()稍后在代码中显式调用函数才将其保存到数据库中?

到目前为止,我有这个代码:

可以这样ContactProfile访问ContactsList

0 投票
1 回答
184 浏览

swift - $ 在 SwiftUI 中如何工作以及为什么我可以将 @StateObject 转换为 @ObservedObject

我是一个新手,正在开发一个基本上有一个冰箱类的应用程序,其中包含食物。我正在尝试使用一个带有食物清单的冰箱。所以我将foodList设置为一个已发布的对象,并在程序启动时实例化一个 @StateObject 冰箱。基本上,从我的角度来看,每当foodList发生变化时,冰箱对象都会保存它的状态并给我一个新的视图。

另外,我想将此@StateObject 冰箱传递给另一个视图,以便我的另一个视图可以修改冰箱中的foodList

下面是我的代码

基本上我想将 传递@StateObject private var fridgestruct AddFoodView: View以便我AddFoodView可以使用该变量。根据我在网上了解到的情况,我认为我需要这样@ObservedObjects注入NavigationLink(destination: AddFoodView(fridgeView: fridge))。这不会给我带来让我困惑的错误(至少在调试器阶段)。不是fridge一个Food变量和 fridgeView一个@ObservedObject Food变量吗?

如果我做这样的事情AddFoodView(fridgeView: $fridge))。有一个错误说Cannot convert value '$fridge' of type 'ObservedObject<Fridge>.Wrapper' to expected type 'Fridge', use wrapped value instead

0 投票
1 回答
178 浏览

swiftui - SwiftUI 在列表的单元格视图中更新observedObject

我试图改变observedObject 的值。该值将更改,但不会永久更改。当我向下滚动并向后滚动时,该值将变回原始值。我猜是列表单元格视图中@State 的问题。但我无法弄清楚在observedObject 中永久更改数据的解决方案是什么。那么我应该怎么做才能通过使用数据单元永久更改数据。

0 投票
3 回答
58 浏览

swift - SwiftUI:为什么我的 Data 的更改属性不刷新 UI?

我有以下数据模型:

我在视图中使用集合如下:

因此,在我的 SwiftUI 中,每当我通过imageCollection.images.append(anImage) 一切正常添加 MyImage 的新实例时,任何视图都会相应更新,任何使用imageCollection.haveCoordinates()的视图也会更新。但是,当我更改图像的属性(如imageCollection.images[0].coordinate = someCoordinate. 这目前不起作用。

有什么提示吗?

0 投票
1 回答
281 浏览

swift - How to retrieve data from Firestore as soon as SwiftUI view appears?

I have this class CurrentUser that manages the currently logged in user and pulls the data for that user from Firebase.

One of CurrentUser's attributes is userEventIDs. I also have a collection of Events documents. Each user has their own array of event IDs that correspond to the events within the Events collection in my Firestore database.

On the MyAccount view struct I have an onAppear method that queries the Events collection based on the currentUser's array of eventIds, returns those Events, and then sorts them to be either before or after today based on the date of the event.

Currently the eventIds load in the first time this view is opened, but the query from the events comes back blank twice and only after the view is switched to another one and back to the MyAccount view will the page populate with these events.

Is there something I can do to make the events load on the first time the view is opened?

CurrentUser

View