Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ReactiveCocoa takeUntil:donds';不发送完成?_Ios_Reactive Cocoa - Fatal编程技术网

Ios ReactiveCocoa takeUntil:donds';不发送完成?

Ios ReactiveCocoa takeUntil:donds';不发送完成?,ios,reactive-cocoa,Ios,Reactive Cocoa,我在做一些基本的信号链接。按下按钮后,我想等待loginSignal完成一些操作。信号完成,但未调用mysubscribeCompleted:块 直接订阅next和loginSignal上的completion,按预期工作。那么为什么takeUntil:subscribebcompleted:不起作用呢 [[[button rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:loginSignal] subscrib

我在做一些基本的信号链接。按下按钮后,我想等待
loginSignal
完成一些操作。信号完成,但未调用my
subscribeCompleted:

直接订阅
next
loginSignal
上的
completion
,按预期工作。那么为什么
takeUntil:subscribebcompleted:
不起作用呢

[[[button rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:loginSignal] subscribeCompleted:^{
    NSLog(@"COMPLETE");
    // Do some other stuff
}];
编辑:以下是
logAll

2014-08-15 10:52:56.417 app[88791:60b] <RACDynamicSignal: 0x10c58a120> name:  next: <UIButton: 0x10c68a870; frame = (240 80; 40 40); opaque = NO; autoresize = TM+BM; autoresizesSubviews = NO; tag = 1103; layer = <CALayer: 0x10c6894a0>>
2014-08-15 10:52:56.417 app[88791:60b] <RACDynamicSignal: 0x10c58a120> name:  next: <UIButton: 0x10c68a870; frame = (240 80; 40 40); opaque = NO; autoresize = TM+BM; autoresizesSubviews = NO; tag = 1103; layer = <CALayer: 0x10c6894a0>>
2014-08-15 10:53:02.086 app[88791:410b] <RACDynamicSignal: 0x112e2c4b0> name:  next: 1
2014-08-15 10:53:02.087 app[88791:410b] <RACDynamicSignal: 0x10c6ea5d0> name:  next: 1
2014-08-15 10:53:02.087 app[88791:410b] <RACDynamicSignal: 0x10c6ea5d0> name:  next: 1
2014-08-15 10:53:02.088 app[88791:410b] <RACDynamicSignal: 0x10c6b8830> name:  next: 1
2014-08-15 10:53:02.089 app[88791:410b] <RACDynamicSignal: 0x10c6b8830> name:  next: 1
2014-08-15 10:53:02.089 app[88791:410b] <RACDynamicSignal: 0x10c52e570> name:  next: 1
2014-08-15 10:53:02.090 app[88791:410b] <RACDynamicSignal: 0x10c52e570> name:  next: 1

事实证明,
takeUntil:
不是获得这种行为的正确方法。启动
loginSignal
后,它会导致
sendCompleted:
多次启动(因此看起来没有启动?),即使是对于未点击的按钮也是如此。更好的方法是
flattmap:
并发送
loginSignal

正确版本:

[[[[[button rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^RACStream *(id value) {
    return loginSignal;
}] take:1] subscribeNext:^(id value){
    // DO STUFF!!!
}];

loginSignal
是如何定义的?添加了该信息。LOGGEDIN为1,仅供参考。
[[[[[button rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^RACStream *(id value) {
    return loginSignal;
}] take:1] subscribeNext:^(id value){
    // DO STUFF!!!
}];