问题标签 [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.
swift - 缺少作为视图祖先的视图
我login.swift
主要有一个:
该文件env.accontId
在 LoginView 中设置登录后,以及成功。
然后我有一个data.swit
:
API 从以下位置调用Transactions.swift
:
我收到Thread 1: Fatal error: No ObservableObject of type GlobalEnvironment found. A View.environmentObject(_:) for GlobalEnvironment may be missing as an ancestor of this view.
了guard let url = URL(string: "https://url.com/api.php?get_transactions&account=\(env.accountId)") else { return }
.
据我了解,将 GlobalEnvironment 添加到 Api 类中,它应该可以工作,但它没有。相反,我已经尝试在函数中添加它,但它也不起作用。如您所见,将 .environmentObject() 添加到列表视图本身也是如此。
class - 为什么我的 ObservableObject 似乎被特定视图破坏了?
我创建了一个类,用于将跟踪保留为实际视图(一个简单的 ObservableObject 字符串):
我已经创建了一个简单的自定义 TabView,它非常适合这个:
我想简化代码,所以我创建了这个视图:
现在我像这样使用 Test2CustomTabView :
但是现在当我单击自定义 tabview 项目时,视图没有刷新,ObservableObject 中的更改不会刷新视图,我不明白为什么..
任何想法?
谢谢
swift - 从 ViewRouter 和 ObservableObjects 或 environmentObject 指向 SwiftUI 中的所有三个视图
我最近一直在使用 SwiftUI,并且我设法在 ContentView.swift 中编写了我的 rootView,包括 2 个按钮来更改应用程序中的其他“页面”或“屏幕”。目前,我可以在我的代码中的两个视图之间移动。我在每个“屏幕”快速文件中使用了 ObservableObjects(viewRouter : ViewRouter)。我决定编写第三个屏幕以弹出供用户查看。在包含相同的结构和显示该视图的方法之后:第三个视图的按钮操作未运行。编译没有错误,应用程序将构建!但是,当单击 FirstScreen 内的按钮时,ThirdScreen 不可见。
这是主视图 ContentView:
这是 FirstScreen 文件,其结构如下:
这是我的 ThirdScreen 的代码,应该从 ViewRouter 加载,以及单击 FirstScreen 的 Swift 文件中的按钮所做的更改。
这是 ViewRouter.swift 可以很好地管理屏幕。
最后,我正确工作的 SecondScreen.swift。这个文件可能是多余的,但我把它包括在这个文件中工作的好东西的可能性很小。由于按钮在内部工作以更改视图。
非常感谢你在这里帮助我。我很想继续制作屏幕文件,如下所示,我只是想知道为什么我的第三个屏幕没有拉起。在继续解决此问题时,我将迅速做出回应。谢谢!
fatal-error - 如何解决“线程 1:致命错误:No ObservableObject of type,,”崩溃消息
我是编码的新手,这是我的第一个项目。我创建了一个应用程序,它根据胆固醇面板实验室测试的数据确定心血管疾病 (CVD) 的风险。该应用程序在 iPhone XR(画布模拟器)上运行没有任何问题。但是,当我在我的实际 iPhone XR 设备上运行该应用程序时,它会崩溃并产生以下消息:
这是出现错误的地方:
我搜索了 Stack Overflow (SO) 并尝试了所有推荐的解决方案,但没有一个对我有用。我还在 SO 之外进行了搜索,并进行了类似的尝试,得到了类似的结果。我已经回到 SO 看看是否有人可以帮助我。基于这项研究,我认为我在让我的 ObservableObject 对整个应用程序“可见”时遇到了问题,尽管我已经精确地遵循了备受尊敬的编码人员和编码专家(SO 贡献者,Paul Hudson,AzamSharp,Maxcodes,Brian Advent, Code with Chris 等;) 以及他们在构建我的应用程序期间的类似示例。所以,我的问题要么是我用来引用 ObservableObject 的代码的语法,要么是我将该引用代码放在应用程序中的错误位置,或者我缺少一段代码,
该应用程序由三个使用 TextFields、NavViews 和 NavLinks 的用户输入视图组成。一个显示用户输入结果的视图,以及一个显示诊断和 CVD 风险百分比的最终视图。我自始至终都使用了@EnvironmentObject、ObservableObject、@Published var 和@State private var。
以下是一些代码细节:(仅提供相关代码)
我的场景代表:
我在 ContentView 中的类声明:
我在 ResultsDiagnosticsView 中的 ResultsDiagnostics 结构:
我的 DiagnosticsRisk stuct DiagnosticsRiskView:
我的导航视图?用于 ResultsDiagnosticsView 的导航链接:
如果应用程序的完整副本更有帮助,请给我发电子邮件 (wcmarrocco@gmail.com),因为我不知道如何在此处嵌入我的项目副本。谢谢!
memory-leaks - SwiftUI 和 ObservableObject ViewModels 导致内存泄漏,任何示例我应该如何在 ObservableObject 中使用组合
我有这样的示例 ViewModel,我在 Instruments 中看到的是这样和类似的 ViewModel 正在泄漏内存
我在 flatMap 中添加了 [weak self] 并将 .assign(to) 更改为自定义 .assignNotRetain(to),它使用带有 [weak self] 的 sink 它泄漏较少(有 deinit 调用)但有更多 init 调用然后 deinit 调用!这会导致一次性用品:设置为不取消分配/取消订阅
它只是示例视图模型类似的方法,调用服务,然后通过接收器观察输出,分配和更新 @Published 都发生泄漏内存和一次性用品通常不会被释放,所以我应该在 View onDisappear 中手动取消 AnyCancellable 吗?
ios - 登录后SwiftUI LoginView不会消失
我正在使用一个AppStateView()
来检查用户是否登录:
里面LoginView()
:
有一个按钮调用 appState.login 函数:
根据我对可观察对象的理解,我认为,在按下登录按钮后,用户会得到更新,因此LoginView()
视图会在用户登录时重新加载。但它必须切换到AppStateView()
. LoginView()
在中添加第二个检查以显示LoginView()
或感觉有点奇怪,AppStateView()
因为我已经在“父视图”中进行了AppStateView()
。
xcode - 在 SwiftUI 中动态更新列表?
我又回来了哈哈。我的内容视图如下所示:
SearchBar 视图如下所示:
最后,ViewModel 类看起来像:
变量 'resultsNeedToBeUpdated' 是一个布尔绑定,当用户在搜索栏视图中键入一些文本时会更新它,它本质上只是告诉您 SearchResults 视图如果为真则应显示,如果为假则不应显示. 我要做的是根据用户输入的内容更新 SearchResults 视图。
该错误肯定与 SearchResults 视图的显示有关(我认为它仅在数组更新之前显示初始视图)。我尝试使用绑定,因为我认为它会导致 ContentView 重新加载并且它会更新 SearchResultsView 但这不起作用。
swiftui - 带有数组的Swiftui ObservableObject不更新视图
我在视图中使用 ObservableObject 的数组存在问题。我有一个空数组。我在 onAppear 页面调用了一个函数。当数据返回时,视图不会使用数组中的新数据更新:
在我看来,我有这个:
我哪里错了?我已经看到问题是由 ScrollView 引起的
swift - 子视图不会在子视图中呈现 ObservableObject 类中的已发布值更新
我有一个子视图,它是一个包含来自 ObservedObject 的已发布数组变量上的 ForEach 的列表。子视图显示在主 ContentView 上的 TabView 和 NavigationView 中。
但是,当使用 onAppear 函数从网络请求更新列表时,列表不会呈现更新后的数组。
将网络调用放在另一个回调中,例如,另一个视图元素上的点击手势会导致视图正确更新。
我尝试使用 willSet 并手动调用 objectWillChange,但没有成功。
服务器列表视图.swift:
ViewModel.swift:
如果此视图未放置在父视图中,则该功能按预期工作。
编辑以获取更多信息:ApiService 类仅处理 URLSession dataTask,并且模型符合 Decodable 以从 JSON 解码。
父视图在示例中创建 ServerListView,如下所示,其中 service.authenticated 是一个 Bool,根据客户端是否通过 API 进行身份验证设置为 true 或 false。我在没有任何其他代码的情况下进行了测试,只需在正文中创建 ServerListView 即可。看到了同样的结果。
经过进一步测试,将 API 调用放在 ServerViewList.swift 的结构初始化程序中意味着代码按预期工作。但是,这确实意味着 API 调用被放置了两次。该结构似乎被构造了两次,但 onAppear 只被调用一次。
swift - 为什么我的 ObservedObject 已更新但未在视图中显示其更新的内容
我试图显示一个使用 ObservableObject 倒计时时间的简单视图,但似乎我的 ObservedObject 已更新,但未将其更新的内容显示到其绑定视图。显示保持在 60