这是一个相当概念性的问题,如果您需要更多详细信息,请告诉我。
对于高级摘要,我有一组视图控制器: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/