2016-10-10 54 views
1

我对RACCommand的配置机制有点困惑。我想手动处理执行信号的订阅,但仅在sendCompleted事件后调用disposableBlock。这是我真正的任务的问题,希望有人能帮助我。RACCommand - 配置执行信号

- (void)test { 
    RACCommand *rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) { 
     return [self signal]; 
    }]; 

    RACDisposable *rac_dispose = [[rac_command execute:nil] subscribeNext:^(id x) {}]; 
    [rac_dispose dispose]; 
} 

- (RACSignal *)signal { 
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [subscriber sendNext:nil]; 
      [subscriber sendCompleted]; 
     }); 
     return [RACDisposable disposableWithBlock:^{ 
      NSLog(@"dispose block"); 
     }]; 
    }]; 
} 

回答

0

的订阅,你的块参数(以初始化)创建的信号是私有的RACCommand,并没有提供API来处理这些订阅。无论您是否处理从 - [RACCommand execute:]返回的信号,RACCommand都会保持该订阅处于活动状态直至完成。

换句话说,不幸的是没有办法做你想做的事情。如果您需要取消块参数创建的信号的行为,请考虑让这些信号检查某些情况。