StateObject 属性不会更新视图,但 ObservedObject 会

时间:2021-01-16 16:38:44

标签: ios swiftui realm

我正在使用 @EnvironmentObject var modelData : DBViewModel 的另一个视图中将数据保存到 Realm DB 并在此视图中加载它们

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 //..........

1 个答案:

答案 0 :(得分:2)

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

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

但是如果那个 DBViewModel 已经是一个环境对象,为什么要重新创建它?