2016-10-10 7 views
1

RACCommandの処理メカニズムについて少し混乱しています。私は手動で実行信号のサブスクリプションを処分したいが、disposableBlocksendCompletedイベントの後にのみ呼び出す。それは私の本当の仕事の問題です。誰かが私を助けてくれることを願っています。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にプライベートであり、それは、それらのサブスクリプションを配置するには、no APIを提供しています。 RACCommandは、[RACCommand execute:]からシグナルを廃棄したかどうかに関係なく、完了するまでそのサブスクリプションを存続させます。

つまり、残念ながら、あなたがしようとしていることを行う方法はありません。ブロック・パラメーターが作成する信号の動作を取り消す機能が必要な場合は、それらの信号に何らかの状態があるかどうかを確認することを検討してください。

関連する問題