2016-10-10 56 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都會保持該訂閱處於活動狀態直至完成。

換句話說,不幸的是沒有辦法做你想做的事情。如果您需要取消塊參數創建的信號的行爲,請考慮讓這些信號檢查某些情況。