2016-07-16 5 views
1

I持って、次のクラスとメソッド:ReactiveCocaデザインパターン

クラス

- (RACSignal *)createX 
{ 
    NSDictionary *parameters = @{}; 

    return [[[[HTTPClient sharedClient] rac_POST:@"X/" parameters:parameters] 
     map:^id(OVCResponse *response) { 
      [self logResponse:response]; 
      return response.result; 
     }] catch:^RACSignal *(NSError *error) { 
     return [RACSignal error:[self handleError:error]]; 
    }]; 
} 

クラスB

- (void)requestData 
{ 
    [[self.myClassA createX] 
    subscribeNext:^(NSArray *results) { 
     DDLogDebug(@"response : %@", results); 
    } 
    error:^(NSError *error) { 
      [self.dataManager sendError:error]; 
     }]; 
} 

クラスC

- (void)retrieveData 
{ 
    [self.myClassB requestData]; 

} 

設計する最良の方法は何ですか配列番号resultsClass Cにアクセスできるように、requestDataClass Bに含む。

すなわち

私は 、アレイに[array rac_sequence]を使用していくつかの方法を転送すべき私はrequestData内の新しい信号を作成する必要があり、requestDataRACSignal代わりのvoidを返す必要がありますか?

何か助けや指導をいただければ幸いです。ありがとう。

+0

私は反応型ココアに精通していませんが、結果が利用可能なときに呼び出されるブロックパラメータをretrieveDataメソッドに追加することをお勧めします。クラスCは、その結果で何をしたいのかを指定することができます。 – fishinear

答えて

1

私はあなたがdoNextの代わりに、クラスBでsubscribeNext

0

私はここにあなたのユースケースに完全には明らかではないが、私はあなたがパラダイムを混合していると思うを使用したいと考えています。 RACのものは常に非同期なので、ネットワークリクエストの結果に同期的にアクセスするには、何らかの方法でそれを保存する必要があります。

あなたはClassBの上のプロパティに結果を結合することができるか、RACCommandを使用することができ、のようなもの:あなたは、コマンドの実行ごとにRACSignalストリームRACCommandexecutionSignalsを購読することができ

[[RACCommand alloc] initWithEnabled:RACObserve(self, valid) signalBlock:^RACSignal *(id input) { 
return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 

    //make network call 

    //send responseObject to subscriber 
    [subscriber sendNext:responseObject]; 
    //[subscriber sendError:#NSError#] //send error if something went wrong 
    [subscriber sendCompleted]; 
    return nil; 
}] materialize]; 
}]; 

あなたは上で説明したブロックでコントロールしています。

  • RACCommandパターン、あなたは上に説明するように同期アクセス
  • 戻りRACSignalのプロパティにビットにそれにネットワーク呼び出しのより
  • バインドの結果を見て:

    は、だから私はあなたのオプションがあると思いますメソッドを呼び出す

  • おそらくreplay()またはreplayLast()hereを参照してください。RACSignalへの参照を保存し、それにサブスクライブすることができます最後の値へのアクセスのために
関連する問題