ios - StateObject 属性不会更新视图,但 ObservedObject 会
问题描述
我将数据保存到我使用的另一个视图中的 Realm DB @EnvironmentObject var modelData : DBViewModel
并在此视图中加载它们
struct SelectedSinsList: View {
@StateObject var modelData = DBViewModel() //@ObservedObject works, as it always recreates the List when I open this view and values are updated
var body: some View {
NavigationView {
ScrollView{
VStack(spacing: 15){
ForEach(modelData.sins){sin in //..........
解决方案
该行为表明您的视图使用新数据进行更新的唯一原因是父视图正在重绘,从而触发“无主”观察对象被重建。
State 和 StateObject 比 View 结构体的失效和重绘更持久。要使用这些,您需要通过调用 self.objectWillChange.send() 将 StateObject 中的回调或发布者连接到其 objectWillChange 发布者
但是如果那个 DBViewModel 已经是一个 environmentObject,为什么要重新创建它呢?
推荐阅读
- jquery - 如何在 node-express 项目中包含引导程序
- sql - 每月合同总数
- python - 如何将较小的子元素合并为列表中较大的父元素?
- xamarin - ABP:FlurlHttpException 涵盖了 UserFriendlyException
- airflow-scheduler - 为同一 dag 内的任务设置不同的重试延迟时间
- php - 是否可以将 JSON 或数组作为 MySQL 存储过程的输入参数传递
- javascript - 如何在 JavaScript 中从 HTML 页面加载图像字节?
- javascript - 将本地数组值导出为全局值
- python - 如何通过混合多种颜色为绘图着色?
- swiftui - SwiftUi Navigation Bar Button进入第三个View(Controller)后消失