我有以下代码:
- (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:
时,它只会发生一次。我猜测,因为每次都重复使用相同的同步信号,所以需要进行某种重置。任何指针都将非常感激。
答案 0 :(得分:0)
似乎concat没有触发所需的订阅方法,请尝试这样做:
[[[task then:^RACSignal *{
return [[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] take:1];
}] repeat] subscribeCompleted:^{
}];