Ios ReactiveCocoa-从未调用扁平映射块

Ios ReactiveCocoa-从未调用扁平映射块,ios,objective-c,reactive-cocoa,Ios,Objective C,Reactive Cocoa,我在使用RACSignal的flattmap方法时遇到了一个问题-该块从未被调用。如果我给同一个信号下标benext,它工作得很好,问题只在于flattemap 这是一个好办法 [[self.aSignal combineLatestWith:self.otherSignal] subscribeNext:^(RACTuple *tuple) { // gets called just fine }]; 以下是不起作用的: self.yetAnotherSignal = [[self.

我在使用RACSignal的flattmap方法时遇到了一个问题-该块从未被调用。如果我给同一个信号下标benext,它工作得很好,问题只在于flattemap

这是一个好办法

[[self.aSignal combineLatestWith:self.otherSignal] subscribeNext:^(RACTuple *tuple) {
    // gets called just fine
}];
以下是不起作用的:

self.yetAnotherSignal = [[self.aSignal combineLatestWith:self.otherSignal] flattenMap:^RACStream *(RACTuple *tuple) {
    // never gets called
    return returnSignal;
}];

我错过什么了吗?还是我误解了FlattMap的工作原理?

看起来您只遗漏了一点:至少在您的代码片段中,没有人订阅您的新信号

您正在通过CombineTest和FlatterMap从self.aSignal和self.otherSignal构建一个新的信号self.yetAnotherSignal

但是,这个新信号,以及链中的任何操作符,在以某种形式订阅之前,实际上不会做任何工作,最简单的形式是通过SubscribeText,就像您在第一个代码片段中所做的那样

这不仅仅是FlattMap的情况,对于任何操作都是一样的,例如,在第一个示例中,如果您不订阅它,CombineRelatestWith将不会做任何事情。地图、过滤器等也是如此。。。您可以随意选择。

另外值得注意的是,在两个输入信号至少发送一个值之前,CombineRelatestWith不会发送任何内容。