这是一个相当概念性的问题,如果您需要更多详细信息,请告诉我。

对于高级摘要,我有一组视图控制器:
HomeViewController-这是应用程序中的第一个VC,并显示数据列表。
ListViewController-由HomeViewController呈现,显示与HomeViewController中描述的数据相同的列表,但呈现的方式略有不同。
AddViewController-由ListViewController呈现,添加显示在列表中的项目。

当用户完成在AddViewController中添加项目后,我将其编码为弹出AddViewController,并使用viewDidAppear上的ListViewController重新加载ListViewController上的列表以反映新项目。

现在,问题-弹出ListViewController会回到HomeViewController,我也想对其进行更新。现在-我可以再次使用viewDidAppear,但是为了不杀死服务器,我想安装一些系统,上面写着“仅在需要时更新”。

显而易见的解决方案是为每个视图都有一个单例状态管理系统。持有一些“具有hasUpdated”视图的命令,并在其中传递一个视图ID(可能是VC的哈希),这将说明是否轮询服务器或缓存。

我从事iOS已有一段时间了,并且知道Singletons被认为是一种反模式。

另一个解决方案是在每个视图控制器上携带某种“isDirty”状态,并在需要时拦截pop动作以调用闭包……这似乎太冗长了!全球状态管理系统将更易于理解和阅读,但存在很多问题。

这似乎是一件很简单的事情-我想我以前从未见过这个问题,因为我只在单向应用程序上工作(即应用程序下载并显示数据,而不是用户更改数据)。

有任何想法吗?

最佳答案

有不同的方法来实现它。而且,这还取决于如何将数据保留在本地缓存中。

例如,如果您使用核心数据,则可以观察到特定类型的实体的任何更改,并对相应的单元格行执行重新加载,添加/删除单元格行等等。

如果数据更简单,也许保存在数组中-我将创建一个StateController对象,它将包含Array属性并对其执行操作。您可以使用Closures或Delegate Protocol方法来与与之挂钩的任何视图控制器进行通信。

关于ios - 管理全局状态(无单例),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53684070/

10-10 20:50