ios - 管理全局状态(没有单例)

标签 ios swift

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

对于高级摘要,我有一组 View Controller :

HomeViewController - 这是应用程序中的第一个 VC,并显示数据列表。

ListViewController - 由 HomeViewController 呈现,显示了 HomeViewController 中描述的相同数据列表,但呈现方式略有不同。

AddViewController - 由 ListViewController 提供,添加显示在列表中的项目。

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

现在,问题 - 弹出 ListViewController 会返回到 HomeViewController,我也想对其进行更新。现在 - 我可以再次使用 viewDidAppear 但是,为了不杀死服务器,我希望有一些系统说“只在需要时更新”。

显而易见的解决方案是为每个 View 设置一个单例状态管理系统。保存一些“hasUpdated” View 的字典并传递一个 View ID(可能是 VC 的散列),这将说明是否轮询服务器或缓存。

我已经使用 iOS 一段时间了,我知道单例被认为是一种反模式。

另一种解决方案是在每个 View Controller 上携带某种“isDirty”状态,并在需要时拦截弹出操作以调用闭包……这看起来太冗长了!全局状态管理系统更易于理解和阅读,但存在很多问题。

这看起来是一件很简单的事情 - 我想我以前没有见过这个问题,因为我只真正处理单向应用程序(即应用程序下载和显示数据,而不是用户更改数据) .

有什么想法吗?

最佳答案

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

例如,如果您使用 Core Data,您可以观察特定类型实体的任何变化,并对相应的 Cell Row 执行重新加载,添加/删除 Cell Row 等。

如果数据更简单,可能保存在一个数组中——我会创建一个 StateController 对象,它将包含 Array 属性并对其执行操作。您可以使用 Closures 或 Delegate Protocol 方法与任何连接到它的 View Controller 进行通信。

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

相关文章:

在 UITableView 上的 scrollViewDidScroll 之前调用的 iOS 方法

ios - 为什么我不能对 UITableView header 中的照片应用约束?

ios - 如何创建适用于 2 个不同类的通用 swift 函数?

ios - 从 UICollectionView 中删除单元格而不重新加载

ios - 如何保存正在选择的 UIButton(显示复选标记)并将其加载到 iOS 中?

iphone - 当满足特定条件时,如何删除在运行时创建的对象?

swift - 声明不能比封闭范围更可用

ios - CallKit CXCallController.request error com.apple.CallKit.error.requesttransaction Code=6 while app is in the background

objective-c - Xcode 中的 pushViewController

json - 使用 alamofire + swift 获取动态加载的 html