Reactive Cocoaを試していますが、複数の UIControl からの信号を組み合わせるのに問題があります。
UIEdgeInsets のエディターを作成しており、上、左、下、右のインセット用に 4 つの UISteppers があります。
私がやりたいことはこれです:
RAC(self.insets) = [RACSignal combineLatest:@[
[topStepper rac_signalForControlEvents:UIControlEventValueChanged],
[leftStepper rac_signalForControlEvents:UIControlEventValueChanged],
[bottomStepper rac_signalForControlEvents:UIControlEventValueChanged],
[rightStepper rac_signalForControlEvents:UIControlEventValueChanged]
] reduce:^(UIStepper *top, UIStepper *left, UIStepper *bottom, UIStepper *right) {
return [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(top.value, left.value, bottom.value, right.value)];
}];
ただし、これによって信号が処理されることはありません。
次のように、シグナルを 1 つだけ含める場合:
RAC(self.insets) = [RACSignal combineLatest:@[
[topStepper rac_signalForControlEvents:UIControlEventValueChanged]]
reduce:^(UIStepper *top) {
return [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(top.value, 0.0,0.0,0.0)];
}];
期待どおりに動作します (他のステッパーが個別に正常に動作することを観察することもできます) が、複数のコントロールの場合は何も得られません。各コントロールを個別のシグナルとして観察することで回避できますが、それではcombineLatest
メソッドの要点を見逃しているようです。何か間違ったことをしていますか、それとも RAC プロジェクトで問題を提起する必要がありますか?