问题标签 [observableobject]

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 回答
899 浏览

arrays - SwiftUI - 删除绑定数组中的元素会导致错误

我正在为我们公司的工程师开发一个应用程序(使用 Xcode 11.3.1,目标设备:iPad)来报告他们所做的工作。应用程序的一部分需要是他们使用过的部分的可编辑列表。

我已经在一个简单的“人员列表”测试项目(下面的完整项目代码)中复制了我试图实现的机制(观察对象/@Binding 等)。

我仍在努力学习 SWiftUI,所以我可能在我的代码中做了一些愚蠢的事情。

这里的目标是创建一个带有可编辑字段的动态列表。预览代码时,它似乎可以完美运行,但是,在删除元素后,事情就开始出错了。(删除最后一个元素会导致“致命错误:索引超出范围”。

如果在删除一些元素后添加新元素,则新元素的文本字段为空白且不可编辑。

我非常感谢任何人可以提供的任何帮助。

0 投票
1 回答
1968 浏览

arrays - SwiftUI - 删除时列表中绑定数组的有趣问题

这是一个与我之前遇到的问题非常相似的问题(没有人可以回答)。我正在尝试创建一个动态列表,我可以在其中编辑元素。据我所知,推荐的方法是拥有一个带有绑定的 EditView,它由 LIst 中的 NavigationLink 激活。
所以,我已经做到了。起初它似乎可以工作,直到我意识到每个 NavigationLink 只能工作一次(这是一个错误吗?)。我想不出我做错了什么导致了这种情况。
然后我想也许我可以通过在列表中添加 EditView 来切换到就地编辑。我设计了一种理论上的方法来做到这一点,然后在我的代码中进行了尝试。起初它似乎工作得很好。但是,如果启用了“就地编辑”,则删除最后一个元素会导致“致命错误:索引超出范围”。
我已将我的整个代码捆绑到一个文件中,因此您可以复制并粘贴到 Xcode 中自己尝试。
我开始认为 XCode 11.3.1 可能还远未完成。

任何人都可以对此有所了解吗?我找不到任何可以帮助我的东西。
更新:感谢 'krjw' 指出单次使用 NavLink 问题不会发生在真实设备上。
“最后一个元素删除”问题似乎与元素视图中存在的活动绑定有关。

0 投票
3 回答
494 浏览

arrays - 如何让 Observable Object 更新列表?

所以我知道我的项目正在添加到“vitallist”(通过在终端中打印列表),但我没有看到它们出现在列表视图中。我认为这与“ObservedObject”没有正确链接有关。有什么建议么?

0 投票
1 回答
934 浏览

swiftui - 在 ObservableObject 中引用 EnvironmentObject

我有一个 LoginView,如果用户未登录,则显示 RegisterView,如果用户已登录,则显示 ContentView:

ContentView具有三个ObservedObject属性,它们使用 combine 从带有 rest api 的服务器获取内容。

我遇到的问题是我想从任何observedObjects 中引用,例如当会话令牌过期userManager时其余api 返回时。401 Unauthorized然后我希望 ObservedObject 将isRegistered标志设置为userManagerfalse以便RegisterView自动显示。但我该怎么做呢?我无法userManager在任何 ObservedObject 属性初始化程序中设置对的引用,因为编译器抱怨属性初始化程序在self可用之前运行。

0 投票
1 回答
269 浏览

swiftui - 从 ObservableObject 中移除对象

ViewModels,一个是roles包含的存储skills

榜样是:

另一个ViewModel是商店skills

下面显示了我想要做什么,从SkillStore(handy)中删除一项技能,并自动从任何role碰巧拥有该技能的技能中删除已删除的技能RoleStore

删除方便的技能

如您所见,移除技能handy并不会将其从角色中移除Ansatt。我不知道该怎么做,所以我准备了一个任何人都可以从 Github 克隆的 Xcode Playground:https ://github.com/imyrvold/roleSkills

必须SkillStore有一种依赖于技能的方法,SkillStore或者除了循环遍历所有角色并从所有具有该技能的角色中删除该技能之外,没有其他方法吗?

0 投票
2 回答
1074 浏览

swiftui - SwiftUI - 通过嵌套引用类型传播更改通知

我想将 SwiftUI 中的 ObservableObject 行为扩展到嵌套类,并且我正在寻找正确的方法来做到这一点。可以使用 Combine“手动”完成,但我想使用 SwiftUI 有一种更简洁的方法,我希望你能指出我正确的方向。这就是我的意思……</p>

下面是一个典型的 ObservableObject 应用,让 View 动态响应引用类型的变化。点击按钮切换showText值,使文本出现/消失在屏幕上:

这工作正常。

但是下面的修改呢,其中包含的类showText是 an InnerClass,本身包含在 an 中OuterClass?按钮切换showText得很好,但是值更改的通知不再通过OuterClass实例传播到视图,因此视图根本不再显示文本。

对此有什么优雅的解决方法?

0 投票
1 回答
526 浏览

ios - SwiftUI,API调用成功返回时如何关闭当前呈现的视图

我正在使用 SwiftUI,我正在尝试实现一个简单的逻辑操作,但无法理解 SwiftUI 操作层次结构。

我有一个类似这样的 API 调用,

现在,我有一个类似这样的视图,根据请求我想关闭这个视图,但我找不到任何方法,

如果有人能像我是 SwiftUI 的新手那样详细解释一下这件事,我看过很多教程,但无法理解 swift 的这种结构。

0 投票
3 回答
279 浏览

swiftui - 如何通过动态调用替换@FetchRequest

我的 SwiftUI 项目中有这段代码运行良好

但是,当 SettingsView 关闭时,我需要动态调用 FetchRequest 结束重新加载 Picker 视图。可能我应该使用@ObservableObject,但是如何在 Picker 视图 ForEach 中放置获取请求并使用结果?感谢您的提示。

0 投票
1 回答
753 浏览

swift - SwiftUI ObservedObject in View has two references (instances) BUG

I do not why but I have very frustrating bug in my SwiftUI view. This view has reference to ViewModel object. But this View is created multiple times on screen appear, and at the end the single View have multiple references to ViewModel object. I reference this view model object in custom Binding setter/getter or in closure. But object references in Binding and in closure are totally different. This causes many problems with proper View refreshing or saving changes.

I am experiencing this problem in multiple places writing SwiftUI code. I have several workarounds:

1) as you can see here I use additional @State var to store dealStageId and pass it to viewModale.changeDealStage() instead of updating it on viewModal

2) in other places I am using Wrapper View around such view, then add @State var viewModel: SomeViewModel, then pass this viewModel and assign to @ObservedObject.

But this errors happens randomly depending on placement this View as Subview of other Views. Sometimes it works, sometime it does not work.

It is very od that SINGLE view can have references to multiple view models even if it is instantiated multiple times.

Maybe the problem is with closure as it keeps reference to first ViewModel instance and then this closure is not refreshed in adaptivePicker view modifier?

Workarounds around this issue needs many debugging and boilerplate code to write!

Anyone can help what I am doing wrong or what is wrong with SwiftUI/ObservableObject?

UPDATE

Here is the usage of this View:

UPDATE 2

Here is adaptivePicker

0 投票
1 回答
707 浏览

ios - 如果父项有更新,ObservedObject 无法在 NavigationLink 的目的地上工作

我有两个屏幕,一个主屏幕和一个详细信息,详细信息有一个 ObservedObject 有它的状态。我还想隐藏 master 上的导航栏并详细显示它。为此,我将导航栏隐藏状态作为主视图上的 @State 属性,并将其作为绑定变量发送回详细视图。

我遇到的问题是,每当我在详细信息屏幕中更新该变量时,ObservedObject 就会停止工作。

这是重现该问题的示例代码:

如果我保持原样,文本将不会更新为“工作”。如果我删除 line self.navigationBarHidden = false, ObservedObject 将正常工作并且文本将更新。

如何实现预期的行为,更新导航栏,同时保持观察到的对象正常工作?