将Reachability与ReactiveCocoa集成?

时间:2014-06-04 16:33:52

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

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

我不确定我所做的工作,因为一些RAC设计指南建议不要这样做。但是根据我一直在研究的内容,我找不到合适的方法来处理这个问题(或者更可能的是,我知道如何理解)。

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

问题是我们只需要我们的可见视图控制器来做出反应,所以我们正在使用RACDisposable。这样,当一个视图控制器出现时,它会订阅信号,当它消失时,我们就会处理它。

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

这种方法对于这种"无限"是否正确?信号φ

另一种方法是使用一个信号,当一个新用户加入时,它会删除以前的用户。这样的事情存在吗?

提前感谢任何光线,你可以指出我的方向。


this发帖后我开始尝试takeUntil:[self rac_willDeallocSignal]这似乎在理论上有用,但对我来说并不适用。由于此行为已封装在Manager中,并且不应该取消分配,因此我不知道这对我有利。

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

1 个答案:

答案 0 :(得分:6)

  

从这篇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可以实施,根据是否有任何订阅者,根据需要注册/取消注册可达性状态更改。