我对在View Controller之间共享模型状态有疑问。
让我们举个例子:Twitter应用程序。在时间轴提要中,您会看到状态列表,这些状态是从API加载的,序列化为模型的状态。在提要Feed中,您还可以找到状态列表。它们也从API加载,序列化为模型,但序列化为不同的实例。如果用户点击提及提要中的“心脏”按钮,则它也应在时间轴提要中显示为喜欢的推文。但这意味着共享代表相同状态更新的两个不同模型实例的状态。
我要解决此不一致状态的方法是使用状态的“缓存”。我将其作为静态属性放在状态模型中,如下所示:
static var cache: Array<Status> = Array<Status>()
并使用辅助方法始终为每个帖子使用单个实例,无论从哪个视图控制器加载/修改它们。
是反模式吗?有更好的方法吗?
答案 0 :(得分:0)
如果我没记错的话,Twitter使用Firebase,因此自动更新仅要感谢实时观察数据库。您可能应该考虑观察对象的变化,并适当地更新视图所基于的集合。不过我不知道您的确切架构。
答案 1 :(得分:0)
请先重新措辞。
用户在视图控制器A中修改Y,但视图控制器B不显示更新。
当然,还有其他选项,例如发送通知,以便其他视图控制器知道刷新数据。
不过,我认为您不应该继续保持不同实例的同步。