【问题标题】:How to re-render a SwiftUI view如何重新渲染 SwiftUI 视图
【发布时间】:2020-08-29 00:27:02
【问题描述】:

我有一个主页,它可以在没有 NavigationLinks 的情况下转到其他视图,而是使用 isActive 状态并弹出到根解除,因为这样,我被告知,我们的应用程序使用更少的内存,因为它本质上是循环的。因此,视图永远不会再次导航到,它始终存在,因此永远不会重新评估 @State 变量。例如,在我们的主页上,我有这个:

@State var showSwingAgainSheet = appDelegate.swing?.isRecorded ?? false

指的是核心数据变量,稍后用于显示工作表:

.modifier(SaveOrDeleteRecordingSheetView(isPresented: $showSwingAgainSheet))

当 Core Data 变量设置为 true 时,除非我强制关闭应用程序,否则工作表不会弹出

我曾考虑过使用@Environment、@ObservableObject,但想不通。解决这个问题的最佳方法是什么?

【问题讨论】:

  • 核心数据对象在哪里?你会显示更多代码吗?

标签: swift core-data swiftui persistence


【解决方案1】:

this 有什么帮助吗?更改 .id() 修饰符会重新加载视图,导致 @State 变量恢复到它们的默认状态。由于默认状态是三元运算符,它可能会在重新加载视图时重新计算它。

【讨论】: