问题标签 [coordinator-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
454 浏览

ios - PresentingViewController 如何获得通知其 PresentedViewController 自行解散?

鉴于:

  • 呈现 ViewController B 的 ViewController A
  • ViewController B没有对 ViewController A 的引用(除了隐含的presentingViewController属性)
  • ViewController B 调用dismiss自身,不执行任何其他操作

我想要达到的目标:

  • ViewController A 想知道 ViewController B 何时被解雇以清理某些状态

限制:

  • 我不想使用 KVO
  • 我不想以任何方式修改 ViewController B 或其行为

到目前为止我发现了什么:

  • dismiss(animated:completion:) 根据文档将调用转发到其presentingViewController. 但似乎没有dismiss(animated:completion:)被调用,而是一个私有方法。_performCoordinatedPresentOrDismiss:animated:
  • iOS文档presentingViewController具有误导性。它说“呈现的视图控制器将此属性设置为呈现它的视图控制器”,但事实并非如此。在 iOS 11 中,这将始终指向present被调用的 VC 的根父 VC。同样,文档presentedViewController具有误导性。它说“调用该方法的视图控制器将此属性设置为它呈现的视图控制器”,这不是全部。调用的 VC(其所有父 VC 和子 VC)层次结构中的每个 VC 都present将指向同一个presentedViewController.
0 投票
1 回答
613 浏览

swift - UIViewController 不会取消初始化(mvvm + 协调器)

因为这个问题,我很头疼。为什么我的 SplashscreenViewController 没有取消初始化?你们在下面发布的代码中看到任何潜在的保留周期吗?我试图检查 Malloc 堆栈,但找不到任何有用的信息。

拥有 SplaschreenViewController 实例的类是它的协调器。下面的代码:

还有一些来自 BaseCoordinator 的代码:

提前感谢您的回答!

0 投票
4 回答
1698 浏览

ios - 协调器模式 - 使用 Storyboard 代替 Xib

这是我第一次使用协调器模式。虽然我已经意识到它的重要性,但我有一个主要问题。
我浏览了这篇关于这种模式的精彩文章。事实上,我能够使用它自己构建一个演示项目。不过有一点 - 建议使用Xib。并不是专门提到不能使用故事板,但是在文章结尾处通过这些行,让我不这么认为:

强大的力量伴随着巨大的责任(和限制)。要使用这个扩展,你需要为每个 UIViewController 创建一个单独的故事板。故事板的名称必须与 UIViewController 类的名称匹配。此 UIViewController 必须设置为此故事板的初始 UIViewController。

它提到,在Storyboards的情况下,我们应该创建一个扩展并将其用于UIViewController

故事板可实例化:

查询:

  1. 正如作者提到的,必须为每个创建单独的StoryboardUIViewController,如何在Coordinator 模式中使用 Xib 是一种更好的方式?
  2. 为什么我们需要为每个创建单独的故事板UIViewController?我们UIViewController不能通过不链接任何UIViewController使用 segues 来使用 's storyboard 标识符吗?这样可以使用标识符调整上述扩展名并轻松实现。
0 投票
1 回答
37 浏览

scala - 一个工人可以成为协调员并发送给 Spark 中的其他工人吗?

我是一个新手,Spark我有一个项目,其中有coordinator一个cluster,它从另一个收集数据nodes,进行一些计算并将一个global data array返回给nodes.

我正在尝试实现这一点Spark,并且我用 and 创建了它,driverbroadcast variables我不确定collect()大数据中的。

是否可以仅在 之间执行此操作workers?类似于repartition一对一worker并将计算作为输入发送回workers?

0 投票
1 回答
957 浏览

ios - 在协调器模式中重用视图控制器

我的 iOS 应用程序中有一个 ViewController 流 ( Flow A)。流程 A 相当复杂(根据情况,一些视图控制器会提前显示,或者根本不显示,等等)。为了处理这个问题,我正在使用协调器模式。

代码(简化):

FlowACoordinator包含有关如何以及何时使用该present()方法呈现视图控制器的逻辑。到目前为止,一切都很好。

现在我有第二个流程,Flow B与流程 A 大不相同。除了我想在两者之间共享一个视图控制器,我们称之为SharedViewController。这就是事情变得奇怪的地方,因为我不知道如何在两者之间共享这个视图控制器。

问题:我有两种方式的通信 - 协调器将自己设置为它呈现的视图控制器的协调器,并且视图控制器调用协调器上的方法作为对用户交互的响应。SharedViewController但是,它由两个 Coordinator 之一管理,并且它必须以某种方式将信息传递给当前的 Coordinator,而不管它是哪一个。

到目前为止,我找到了两种解决方案,它们都不令人满意:

  1. 一个额外的协调器只处理SharedViewController- 这是很多开销,并且在很大程度上违背了协调器的目的。

  2. 在 中实现FlowACoordinatable, FlowBCoordinatable, ... SharedViewController,并具有多个协调器属性,并在适当的时间调用所有这些属性。还有很多开销、样板代码和对协调器的调用。

关于如何很好地解决这个问题的任何想法?

0 投票
1 回答
268 浏览

swift - 为什么我的自定义过渡不适用于我的导航控制器?

我在我的代码中使用协调器模式从 RootNavigationController 转换到 SplashScreenViewController

我还使用自定义转换来处理从 RootNavigationController 到 SplashScreenNavigationController 的转换。

我已经将 RootNavigationController 的委托设置为它自己并实现了动画转换,但是,当我启动应用程序时,它似乎只是忽略了我所做的一切,只使用系统默认转换。

这是 RootNavigationController 中的代码

0 投票
1 回答
730 浏览

ios - 以编程方式创建 UITabBarController,只显示一个选项卡

我有一个 TabBarCoordinator,它包含一个 UITabBarController。

我想添加两个 UINavigationController(CoinPage 和 Top/Flop),但只有一个显示在选项卡中。我以为我已经以正确的方式设置了一切,我尝试了其他一些东西,但我无法让它工作。

在此处输入图像描述

这是我的代码:

我做了一些研究,例如他以类似的方式设置选项卡: https ://medium.com/@satindersingh71/uitabbarcontroller-programmatically-2a3df63607f1

所以我不明白为什么它不起作用。

0 投票
5 回答
3375 浏览

ios - iOS Swift Coordinator 模式和导航控制器的后退按钮

我正在使用模式MVVM+Coordinator。我的每个控制器都是由coordinators. Navigation但是当点击控制器的后退按钮时停止我的协调员的正确方法是什么?

0 投票
1 回答
73 浏览

swift4 - 我必须在我的协调器代码中使用 NavigationController 吗?

我正在重构我的代码,并想尝试一下协调员。

但是,我UINavigationController不太愿意负责,因为它会在子坐标上创建一个后退按钮以及一个我不想要的不需要的顶部栏。

反正我可以用普通UIViewController代替UINavigationController吗?

PS:这是我找到的示例代码 [这里][1]

协议协调器 { func start() }

协议 FlowACoordinatable { var coordinator: FlowACoordinator }

类FlowACoordinator:协调器{

}

类 FirstViewController: UIViewController, FlowACoordinatable {

}

0 投票
1 回答
1338 浏览

swift - 即使在保护自我和非可选属性之后,也可以获取“在初始化之前使用的变量‘self.xxx’”

我目前正在为用 Swift 编写的新应用程序实现 MVVM(使用 Rx)架构,并且在编写 ViewModel 时遇到了困难。

这是它的开始:

这是一个基本函数,它采用当前值来创建要返回的对象:

我在这里要做的是在我的 init 函数上注册我的输入和输出。对于输出部分,我想用一些当前值(getAlertProperties)传输函数的结果。基本上我的 ViewController 上有一个触发器,当用户单击一个简单的按钮时,它需要这些值显示在 AlertController 中。

对于输出中的 buttonClicked 声明,我收到错误消息Variable 'self.xxx' used before being initialized"。我知道我需要在使用self之前初始化每个非可选属性,但我认为也许使用警卫可以解决问题。显然不是...

如何在不使我的属性输入输出选项的情况下解决此问题?

谢谢