ReactiveCocoa反复发出信号

时间:2016-08-23 11:42:16

标签: ios objective-c reactive-cocoa

我有以下代码:

- (RACSignal *)addSyncTask:(RACSignal *)task withInterval:(NSTimeInterval)interval
{
    return [[task concat:[[RACSignal empty] delay:interval]] then:^RACSignal *{
        return [self addSyncTask:task withInterval:interval];
    }];
}

- (void)setupFooSync
{
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [self.API syncFooWithCompletion:^(id response, NSError *error) {
            [subscriber sendError:error];
            [subscriber sendCompleted];
        }];
        return nil;
    }];
    [self addSyncTask:signal withInterval:60];
}

这个想法是,一旦setupFooSync被调用,同步将每60秒发生一次,直到取消分配包含实例。但是,使用上面的代码,同步永远不会发生。当我将+createSignal:更改为+startLazilyWithScheduler:时,它只会发生一次。我猜测,因为每次都重复使用相同的同步信号,所以需要进行某种重置。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

似乎concat没有触发所需的订阅方法,请尝试这样做:

[[[task then:^RACSignal *{
    return [[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] take:1];
}] repeat] subscribeCompleted:^{

}];