Picker View 数据消失太快
Posted
技术标签:
【中文标题】Picker View 数据消失太快【英文标题】:Picker View data disappears too quickly 【发布时间】:2020-11-03 00:23:56 【问题描述】:场景:
-
应用程序是基于选项卡的;一个选项卡是具有“选择器(数据)视图”的容器视图。
Picker 视图:Picker 最初通过@State -> @Binder 加载数据。
“首页”(Greetings)视图最初显示在 ZStack 内的 Picker 视图上方。
用户确认首页消失以显示选取器视图 (#2)。
注意:数据由 Picker 每次调试检查接收。 隐藏的 Picker View 显示了初始数据。
问题: 显示的 Picker View 变空; 关闭后首页/视图。
以下是通过数据断点的调试列表:
观察: 我想尽快访问数据源以填充 Picker 视图以避免用户等待数据。因此,数据最初是在显示 Picker 视图之前访问的。
然而, Picker View 显然在显示之前被重新渲染。
注意:如果我注释掉首页代码,我会看到 populated 选择器页面。
????我添加了一个布尔过滤器以避免使用空数据负载调用 Picker。
问题: 如何使数据更持久;也就是一直待到被解散?
我是否必须制作@Binding 变量的具体副本?
【问题讨论】:
你能提供可重现的例子吗? 应用很大;我会尝试用一个简单的版本重新创建。然后回来。 【参考方案1】:非 SwiftUI 修复:
对持久数据向量使用单例;因此不受控制视图生命周期的影响:
final class DataSource
static let shared = DataSource()
var myVar:String = "Hello World"
var countryNames: [String]?
这很简单,很优雅。 不过,我想在这里使用 combine,但是数据寿命太不稳定了。
随着我对 Combine 的精通,我计划在我的项目中进一步回顾这个范例。
如果有人有不需要 Singleton 对象的 SwiftUI/Combine 访问、保存/共享数据的方法,请发布。
【讨论】:
以上是关于Picker View 数据消失太快的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI Picker 视图在 TabView 中消失
我的 UIActivityIndicatorView 消失得太快,使其无用,延迟是解决此问题的最佳方法吗?