【问题标题】:Integrating Reachability with ReactiveCocoa?将可达性与 ReactiveCocoa 集成?
【发布时间】:2014-06-04 16:33:52
【问题描述】:

我正在使用 ReactiveCocoa 开发应用程序,现在是时候集成 Reachability 来处理网络事件了。

我不确定我所做的工作是否受到了一些 RAC 设计指南的反对。但是根据我一直在研究的内容,我找不到合适的方法来管理这个问题(或者更有可能,我不明白如何)。

我们的想法是拥有一个独特的信号,用于根据 Reachability 的通知发送事件。我们的每个视图控制器都会订阅该信号并以特定的方式对每个信号做出反应(即警报视图、什么都不做等)。

问题是我们只需要可见的 viewcontroller 做出反应,所以我们使用的是 RACDisposable。这样,当 viewcontroller 出现时它会订阅信号,当它消失时我们会处理它。

根据 RAC 的设计指南,应该避免使用 RACDisposable,但我无法以任何其他方式处理此订阅/取消订阅周期。

这种方法对于这种“无限”信号是否正确?

我们想到的另一种选择是使用一个信号,当有新订阅者加入时,它会删除其先前的订阅者。有这种事吗?

提前感谢您可以指向我的方向。


this SO 帖子我开始尝试takeUntil:[self rac_willDeallocSignal],这在理论上似乎很有用,但对我来说并不真正有用。由于此行为被封装在一个 Manager 中,并且不应该被释放,我不知道这如何对我有利。

我想到的一个选项是takeUntil每当调用停止方法时都会触发一个新信号;但这似乎只是因为我们不使用 RACDisposable。

【问题讨论】:

  • 顺便说一句,这是有效的。我只是想知道是否有更好的方法。
  • 嘿。您是否有机会分享您的反应式可达性管理器。我可以使用这样的包装器,并希望看到一个例子。
  • @DanielLahyani 抱歉,不,这是在另一家公司工作的项目,不再有访问权限:(

标签: ios objective-c network-programming reachability reactive-cocoa


【解决方案1】:

从这篇 SO 帖子中,我开始尝试 takeUntil:[self rac_willDeallocSignal],这在理论上似乎很有用,但对我来说并不真正有用。由于此行为被封装在一个 Manager 中,并且不应该被释放,我不知道这如何对我有利。

您的视图控制器可以执行以下操作:

- (void)viewWillAppear
{
    RACSignal *disappear = [self rac_signalForSelector:@selector(viewWillDisappear)];
    [[self.manager.reachabilitySignal takeUntil:disappear] subscribeNext:^(id status) {

        // do whatever needs doing with reachability status here

    }];
}

您的经理的reachabilitySignal 可以根据是否有任何订阅者,根据需要实现注册/取消注册以更改可达性状态。

【讨论】:

  • 这太棒了。在 viewWillDissapear 上解除信号后,我们设法移除了 RACDisposable。没想到在一百万年后!谢谢!
  • 感谢指正。我很累的时候写了原来的回复。 -viewWillUnload 当然已弃用,但正如您所指出的,-viewWillDisappear 应该适用于大多数情况。我已更新回复以反映这一点。
  • 我不认为这会在下次视图出现时重新订阅信号......一旦“takeUntil:”信号触发该信号就完成了。
  • 是的,我说错了-viewDidLoad,而我的意思是-viewWillAppear。编辑答案以反映这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2011-12-17
相关资源
最近更新 更多