2013-04-02 6 views
7

UAGitHubEngineを使用してGitHubのAPIにアクセスしています。私はいくつかのデータを取得するための機能的なリアクティブアプリケーションを書いています。私はコードhereに依存して、非同期ネットワーク要求を設定しています。私が探しているのは、 "General"という名前のチームのチームIDです。私にRACCommandを非同期ネットワーク操作で使用する

[[self.gitHubSignal filter:^BOOL(NSDictionary *team) { 
    NSString *teamName = [team valueForKey:@"name"]; 
    return [teamName isEqualToString:@"General"]; 
}] subscribeNext:^(NSDictionary *team) { 

    NSInteger teamID = [[team valueForKey:@"id"] intValue]; 

    NSLog(@"Team ID: %lu", teamID); 
}]; 

しかし、コマンドを設定するには謎です:私は、フィルタリング/印刷部のOKを行うことができます

self.gitHubCommand = [RACCommand command]; 

self.gitHubSignal = [self.gitHubCommand addSignalBlock:^RACSignal *(id value) { 
    RACSignal *signal = ??? 

    return signal; 
}]; 

私はプッシュ信号を返すために、信号ブロックを設定するにはどうすればよいです一部の非同期ネットワークコールが戻ったときのイベント?

答えて

4

答えはRACReplaySubjectで、その非同期要求をラップするのはAFNetworking usesです。

self.gitHubCommand = [RACCommand command]; 

self.gitHubSignals = [self.gitHubCommand addSignalBlock:^RACSignal *(id value) { 
    RACReplaySubject *subject = [RACReplaySubject subject]; 

    [engine teamsInOrganization:kOrganizationName withSuccess:^(id result) { 

     for (NSDictionary *team in result) 
     { 
      [subject sendNext:team]; 
     } 

     [subject sendCompleted];    
    } failure:^(NSError *error) { 
     [subject sendError:error]; 
    }]; 

    return subject; 
}]; 

addSignalBlock:は、信号の信号を返すので、我々はそれが発する次の信号をサブスクライブする必要があります。コマンドが実行されるまで

[self.gitHubSignals subscribeNext:^(id signal) { 
    [signal subscribeNext:^(NSDictionary *team) { 
     NSInteger teamID = [[team valueForKey:@"id"] intValue]; 

     NSLog(@"Team ID: %lu", teamID); 
    }]; 
}]; 

は最後に、addSignalBlock:ブロックは、私は次のように管理され、実行されません。

[self.gitHubCommand execute:[NSNull null]]; 
関連する問題