【发布时间】:2019-03-23 10:48:27
【问题描述】:
我有一个关于在视图控制器之间共享模型状态的问题。
让我们举个例子:Twitter 应用程序。在时间线提要中,您会看到从 API 加载并序列化为模型的状态列表。在提及提要中,您还有一个状态列表。它们也从 API 加载,序列化为模型,但作为不同的实例。如果用户点击提及提要上的心形按钮,它也应该在时间线提要中显示为喜欢的推文。但这意味着共享代表相同状态更新的两个不同模型实例的状态。
解决这种不一致状态的方法是使用状态的“缓存”。我会将它作为静态属性放入 Status 模型中,如下所示:
static var cache: Array<Status> = Array<Status>()
并使用辅助方法始终为每个帖子使用单个实例,无论它们是从哪个视图控制器加载/修改的。
这是反模式吗?有更好的方法吗?
【问题讨论】:
-
你使用 Core Data 吗?然后有一个简单的解决方案。
-
@Andreas 在这个例子中,在我的例子中,没有。考虑到推文和状态更新的时间敏感性(在我的情况下),我只是从 API 加载数据并存储它没有多大意义。出于好奇,Core Data 将如何解决这个问题?
-
在 CoreData 你有:NSFetchedResultsController + NSFetchedResultsControllerDelegate。然后,您会收到有关对对象所做的任何更改的通知。
-
你在使用 Twitter API 吗?构建类似 Twitter 的应用程序?您提到“如果用户点击提及提要上的心形按钮,它也应该在时间线提要中显示为喜欢的推文。”您是在调用 API 来更新点赞的推文,还是在用户重启手机或应用强制退出时“点赞”丢失?
标签: ios swift architecture