首页 > 解决方案 > 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 //..........

标签: iosswiftuirealm

解决方案


该行为表明您的视图使用新数据进行更新的唯一原因是父视图正在重绘,从而触发“无主”观察对象被重建。

State 和 StateObject 比 View 结构体的失效和重绘更持久。要使用这些,您需要通过调用 self.objectWillChange.send() 将 StateObject 中的回调或发布者连接到其 objectWillChange 发布者

但是如果那个 DBViewModel 已经是一个 environmentObject,为什么要重新创建它呢?


推荐阅读