【问题标题】:Pattern for class to manage view controller flow用于管理视图控制器流的类模式
【发布时间】:2012-12-12 14:34:19
【问题描述】:

目前我正在使用单例类来做一些工作,但我想知道是否有更好的方法。

我有一个具有完全动态工作流程的应用。它使用导航控制器,但视图控制器的顺序完全取决于从我们的服务器下载的一些数据。

整个工作流程被下载并保存在一个数组中。

应用程序的“主菜单”屏幕有几个选项(设置、最近等),这些选项是固定的,但其中之一是动态选项。它总是以相同类型的视图控制器开始,但从那时起它取决于您选择的内容。

说明

这些动态控制器有 4 种不同类型。

  • 具有单一选择和详细指标的表视图控制器。
  • 具有多项选择和复选标记的表格视图控制器。
  • 带有文本字段和键盘的视图控制器。
  • 用于在服务器上搜索帐户的视图控制器(与其他相关 VC)。

当您按下主菜单上的“新事件”选项时,菜单会转到单例 (EventManager) 并告诉它开始一个新事件。

然后,单例将单个选择动态视图推送到导航控制器上,并为其提供初始选项。

从这里开始,单例选择所有选择并计算出接下来需要什么类型的视图。

我希望这是有道理的

无论如何,我不喜欢这里的单例模式,因为我认为它不应该是单例。

我想要的是一个可以从 ViewController 创建的类,然后该类将控制不同视图控制器负载之间的数据推送和弹出以及数据流。然后当你回到主菜单时,这个类可能会消失,所以我每次都会创建一个新类。

有没有我可以查看的模式可以做到这一点?还是应该像现在这样坚持单身?

我希望这是有道理的。

编辑

我可以为此使用 UIPageViewController 吗?然后 UIPageViewController 的数据源/委托对象将代替我当前使用的 Singleton ......还是什么?

从推特请求中添加照片

流程中的每个 VC 都不知道它之前的 cam 或接下来的 cam。他们所做的只是回调单身人士说“选择了这个值”或“输入了这个文本”等......

然后单例存储该信息并计算出接下来会发生什么并将下一个 VC 推入堆栈。

它需要能够沿堆栈向后移动,以便用户可以返回以更改某些内容等...

一切正常我只是不喜欢使用单例。

【问题讨论】:

    标签: ios design-patterns uinavigationcontroller


    【解决方案1】:

    这里有很多 cmets,按重要性排序。

    您在此处描述的所有内容听起来都非常好,甚至包括命名。 “EventManager”听起来像是管理系统中的所有“事件”(所以我希望有一个名为Event 的类,但这是一个小问题,名字可能仍然很好)。还有其他好的设计,但我不会对你有任何问题。

    我同意这看起来确实很适合 UIPageViewController。你当然应该调查一下,看看它是否合适。如果可以的话,使用内置控制器总是很好的。

    没有理由强烈避免单例。它们是 iOS 开发的自然组成部分,在良好的 Cocoa 设计中相当普遍。它们通常应该是"shared" singletons(永远不要创建覆盖+allocWithZone: 的“严格”单例)。这只是创建了一个易于访问的实例,而不是真正的“单例”。这就是NSNotificationCenter 之类的工作方式,通常是一个非常好的模式。

    当系统的许多随机部分需要直接访问它们并且将它们传递给每个人将是很多开销时,单例是最好的(特别是如果您必须传递对象的许多部分不需要它自己)。同样,想想NSNotificationCenter。如果它的用户大多是连续的(即大多数对象你会传递它以实际需要它),那么只需在程序开始时创建一个并传递它。这听起来像你的情况,所以你对它的直觉似乎很好。只需将其取消单例并通过即可。轻松更改。

    但我肯定会深入研究UIPageViewController。它可以很好地解决您的问题。

    【讨论】:

    • 非常感谢。我想我只是想对我正在使用的模式进行一些验证。不过,我会看看 UIPageViewController 但不太急于扔掉我拥有的东西。我知道很多人使用单例作为获取实例的一种懒惰方式,我只是想确保当有其他选项可用时我没有这样做。谢谢。 (此外,还有一个名为 Event :D 的类)
    • 再次感谢您的评论。看到您的帐户后,我进行了一些搜索,实际上我刚刚买了您的书。哈哈。再次感谢您的回复,毫无疑问我会从本书中获得更多有用的帮助。 :-)
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多