问题标签 [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 投票
1 回答
346 浏览

ios - iOS Swift 代码 - 当我有断点时才工作

我有一个从父协调器扩展而来的选项卡协调器;我想为 UITabViewController 分配一个委托;但是当我这样做时,它不会触发任何事情;但是如果我的协调器的 init 函数中有一个断点;它将按预期工作。我的大脑要爆炸了,因为我不知道在哪里搜索错误,因为当 XCODE 确实有断点时它按预期工作。

0 投票
1 回答
848 浏览

swift - 无法移除子协调器,因为在 navigationController 委托方法中 transitionCoordinator 为 nil

简短的 :

我已经实现了Soroush 的Coordinators架构。除了删除以前(子)协调员所需的删除部分外,一切正常。

设想 :

我有两个ViewController名为HomeViewControllerMyGroupsViewController。每个都有自己的协调器,分别命名为HomeCoordinatorMyGroupsCoordinator

用户点击一个按钮HomeViewController触发gotoMyGroupsTapped功能并让用户访问MyGroupsViewController,然后用户点击另一个按钮,通过触发MyGroupsViewController让用户返回。HomeViewControllergotoHomePage()

很简单!: HomeVC -> MyGroupsVC -> HomeVC

但问题是:

navigationController.transitionCoordinator?两个协调员都为零func navigationController(..., didShow viewController: UIViewController...)我无法在每次过渡中删除子协调员。

设置两个协调器navigationController.delegate = self的功能是否正确?start()

我应该navigationController?.popViewController(animated: false )在我的backToHomePage()函数中使用吗?因为Paul Hudson只用过pushViewController.

我的代码 [简化版]:

HomeCoordinator.swift

MyGroupsCoordinator.swift

MyGroupViewController.magik

HomeViewController.swift

0 投票
0 回答
268 浏览

ios - 谁负责使用协调器设计模式调用服务

我有一个使用MVP-C设计模式的应用程序。

我的 rootViewController 是一个UINavigationController,我的主流程呈现一个UITabBarController有 4 个选项卡的。

标签栏控制器有一个UITabBarControllerDelegate并且使用tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)我可以调用我的委托方法,HomeFlowCoordinator它允许我在导航栏上正确设置标签的标题。

我这样做的假设是协调器拥有导航栏,因此任何更改都应由协调器处理,而不是由视图控制器进行。

我的问题是我现在需要UIBarButtonItem在某些选项卡上添加一个。我仍然可以在协调器中执行此操作,但是我开始怀疑这是否是正确的位置,因为我需要为按钮分配一个动作选择器,这意味着逻辑也将存在于协调器中,可能意味着任何服务/提供者调用将存在于协调器中。

这感觉不对。UINavigationController将我的通过传递DI到我的演示者或视图控制器并让每个选项卡修改导航标题和栏按钮操作是否正确?

如果这是真的,他们也可以提出意见,这感觉协调员几乎变得多余了?

0 投票
0 回答
117 浏览

ios - 有什么方法可以让另一个 XCoordinator 路由的导航堆栈继续下去?

我在我的应用程序中使用XCoordinator

假设我有两个协调器:WelcomeCoordinator 和 HomeCoordinator。第一个是 NavigationCoordinator,第二个可能也是,但这里是交易:我希望 HomeCoordinator 初始路由继续 WelcomeCoordinator 的导航堆栈。

有什么办法吗?

0 投票
3 回答
679 浏览

ios - 如果协调器不在 RxSwift 中,那么协调器在 RxSwift + MVVM + 协调器的情况下会去哪里?

我会尽量简短:我们启动了完整的 RxSwift 应用程序,但我们的协调员开始不堪重负地维护和扩展,所以我们正在修改它们以不使用 RxSwift,现在我们不知道如何使用它们以及在哪里使用它们保留它们。

最简单的例子:带有 1 个按钮的视图控制器、视图模型、协调器。我在哪里打电话coordinator.navigate(to: .mySection),怎么打电话?协调器是否应该保留在视图控制器中?我认为它们应该保留在视图模型中,但在视图模型中订阅不是推荐的用法。

我不想过度设计这个,但我希望得到一些有见地的帮助。

0 投票
0 回答
1157 浏览

ios - 带有 UINavigationControllers 和 UITabBarController 的协调器模式

我正在尝试学习如何将协调器模式集成到 iOS 开发中。

我有一个像这样的应用程序。在情节提要中,它看起来像这样。导航控制器和标签栏没有添加到故事板中,因为根据协调器模式,它们将以编程方式添加。

在此处输入图像描述

第一个视图控制器PhoneViewController接收用户的电话号码。此视图控制器嵌入在导航控制器中。输入电话号码后,它会移动到VerifyPhoneViewController。验证后,它移动到MainViewController一个包含三个选项卡的选项卡控制器。这些视图控制器中的每一个都将具有自己的单独导航控制器。

我有一个协议,其中包含每个协调器需要实现的所有必要属性和功能。

AuthCoordinator我为应用程序的身份验证流程部分创建了一个单独的协调器。

导航工作正常。不过有个小问题。

请注意,在移动到 tabbarcontroller 之后,当我在视图控制器之间切换时,标题不会显示在导航栏中(我确实在viewDidLoad每个视图控制器的方法中设置了它们)。加上后退按钮VerifyPhoneViewController也仍然存在。

在此处输入图像描述

问题很明显。我为 初始化的导航控制器AuthCoordinator仍然在顶部。我实际上是MainViewController在推动那个堆栈。

我想不通的是一种这样做的方法。我可以在start方法中隐藏导航栏,但这并不理想,因为它隐藏了导航栏,我不希望这样。

是否有其他方法可以在身份验证流程期间保留导航控制器,然后在显示时/不久后丢弃它MainViewController

演示项目在此处上传。

0 投票
1 回答
1228 浏览

ios - 如何通过协调器模式将值从第二个视图控制器传递到第一个视图控制器

我想在我的 iOS 应用程序中使用 Soroush Khanlou 协调器模式 ( http://khanlou.com )。我的问题是如何通过协调器将数据传递回我的第一个视图控制器?在使用协调器模式之前,我使用委托(协议)将数据从第二个视图控制器传递回第一个视图控制器,因为我的第一个视图控制器负责创建和呈现第二个视图控制器,这不是一个好的解决方案。所以我决定使用协调器从我的视图控制器中删除应用程序导航的工作。这是场景:

0 投票
1 回答
180 浏览

image - 为什么 GetImageCTM pdf 中图像的 X/Y 坐标总是为零?

我在网上找了很久。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。任何帮助将不胜感激。

我通过 ImageRenderInfo#GetImageCTM() 获得矩阵,并获得 X/Y 坐标。但它始终为 0!

我已经尝试过这些 api、GetStartPoint() 和 GetImageCTM。但是,X/Y 协调器始终为 0 :-(

注意:我在某些位置(不是 (0,0) 协调器)中有一些 pdf 格式的图像。

0 投票
2 回答
1455 浏览

ios - 使用协调器模式时奇怪的保留周期

我正在使用 MVVM + Coordinators 构建一个新应用程序。具体来说,我使用的是https://github.com/daveneff/Coordinator上的 Coordinator 模式。

在顶层,我有一个 AppCoordinator,可以启动子协调器 RegisterCoordinator。当注册流程完成后,AppCoordinator 会切换其导航器的根视图控制器,注册流程中使用的协调器和视图控制器应该从内存中释放。

RegisterCoordinator 同时简单地将多个视图控制器推送到导航器的堆栈中:

当整个注册流程完成后,最后一个页面可以保存用户,这会触发authStateChangedAppCoordinator 中的方法,然后更改导航器的 rootViewController。这也应该清理它的子协调器。

遗憾的是,RegisterCoordinator 及其 rootViewController (PhoneInputViewController) 仍然保持活动状态——尽管流程中的其他视图控制器已正确释放。

我尝试childCoordinators = []start方法中手动执行以确保 AppCoordinator 没有对 RegisterCoordinator 的强引用,但即使这样也无济于事。

我不知道是什么保留了强引用,导致保留周期/内存泄漏。我有一个超级最小版本的应用程序,除了显示问题的基本要素外,基本上所有内容都被删除了,在 GitHub 上:https ://github.com/kevinrenskers/coordinator-problem 。

0 投票
6 回答
7402 浏览

swift - “扩展不能包含存储的属性”阻止我重构代码

我有一个 13 行的函数,它在我的应用程序中的每个 ViewController 中重复,整个项目总共有 690 行代码!

为了使 menuTappedAction 函数起作用,我必须像这样声明一个弱变量:

但是通过这样做,我得到了错误Extensions must not contain stored properties 到目前为止我尝试过的内容:

1)删除weak关键字会导致我所有的应用程序发生冲突。2)以这种方式声明:

将使错误静音,但协调器不会执行任何操作。任何建议如何解决这个问题?