2013-04-02 3 views
7

के साथ RACCommand का उपयोग करें मैं गिटहब के एपीआई तक पहुंचने के लिए UAGitHubEngine का उपयोग कर रहा हूं। मैं कुछ डेटा लाने के लिए एक कार्यात्मक प्रतिक्रियाशील ऐप लिखना चाहता हूं। मैं एसिंक्रोनस नेटवर्क अनुरोध सेट अप करने के लिए कोड here पर भरोसा कर रहा हूं। जो मैं खोज रहा हूं वह "जनरल" नाम की कुछ टीम की टीम आईडी है। मेरे लिएअसीमित नेटवर्क ऑपरेशन

[[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); 
}]; 

लेकिन आदेश की स्थापना एक रहस्य है:: मैं छानने/मुद्रण हिस्सा ठीक कर सकते हैं

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]]; 
संबंधित मुद्दे