【发布时间】:2020-04-19 08:26:24
【问题描述】:
我在视图中创建了一个 ObservableObject。
@ObservedObject var selectionModel = FilterSelectionModel()
我在FilterSelectionModel 的init 函数中放置了一个断点,它被多次调用。因为这个视图是NavigationLink 的一部分,所以我知道它是在随后创建的,并且与它一起创建了 selectionModel。当我导航到视图时,将再次创建 selectionModel。
在同一个视图中,我有一个“子视图”,我将 selectionModel 作为 EnvironmentObject 传递,因此子视图可以更改它。
AddFilterScreen().environmentObject(self.selectionModel)
当子视图被关闭时,selectionModel 再次被创建,对它所做的更改也消失了。
有趣的说明:最顶层是NavigationView。如果我添加
.navigationViewStyle(StackNavigationViewStyle())
对于这个NavigationView,我的 selectionModel 的更改消失了。但是如果我不添加navigationStyle,则在子视图中对 selectionModel 所做的更改仍然存在!! (但我不想要拆分导航视图,我想要堆叠导航视图)
在这两种情况下——不管有没有navigationStyle,selectionModel 都会被创建多次。我无法理解这应该如何可靠地工作。
【问题讨论】:
-
更新:我通过打破封装并将
FilterSelectionModel移动到顶部ContentView“解决”了这个问题。但我不喜欢这个解决方案,因为只有我的应用程序搜索功能中涉及的一组视图才需要这个模型。整个应用不需要知道这个模型。 -
我一直在努力解决同样的问题。不知道如何在不破坏封装的情况下优雅地解决这个问题。
-
有什么新的更新吗?我也有同样的问题。
-
目前没有更新。
-
同样的问题。我最终为我的视图模型使用了单例作为解决方法...... ????
标签: navigationview swiftui observableobject