Iphone 反应性Cocoa reduce块永远不会被调用

Iphone 反应性Cocoa reduce块永远不会被调用,iphone,ios,cocoa-touch,reactive-cocoa,Iphone,Ios,Cocoa Touch,Reactive Cocoa,我试着用被动Cocoa来概括,除了RAC(self.windButton.enabled)sections(在底部),其他一切都很好,reduce块永远不会被调用。如果有人能指出我的错误,我会很高兴的。代码是自我解释的,应用程序基本上如下所示: 这里是实现 #import "ViewController.h" @interface ViewController () @property (strong, nonatomic) NSNumber *winding; @property (st

我试着用被动Cocoa来概括,除了
RAC(self.windButton.enabled)
sections(在底部),其他一切都很好,reduce块永远不会被调用。如果有人能指出我的错误,我会很高兴的。代码是自我解释的,应用程序基本上如下所示:

这里是实现

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) NSNumber *winding;
@property (strong, nonatomic) NSNumber *minWinding;
@property (strong, nonatomic) NSNumber *maxWinding;

@property (weak, nonatomic) IBOutlet UIButton *windButton;
@property (weak, nonatomic) IBOutlet UIButton *unwindButton;
@property (weak, nonatomic) IBOutlet UILabel *windingLabel;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.winding = @0;
    self.minWinding = @0;
    self.maxWinding = @15;

    RACSignal *windingSignal = RACAble(self.winding);
    RACSignal *maxWindingSignal = RACAble(self.maxWinding);
    RACSignal *minWindingSignal = RACAble(self.minWinding);

    RAC(self.windingLabel.text) = [windingSignal map:^id(NSNumber *winding) {
        return winding.stringValue;
    }];

    [[self.windButton rac_signalForControlEvents:UIControlEventTouchUpInside]
     subscribeNext:^(id sender) {
        self.winding = @(self.winding.integerValue + 1);
    }];

    [[self.unwindButton rac_signalForControlEvents:UIControlEventTouchUpInside]
     subscribeNext:^(id sender) {
        self.winding = @(self.winding.integerValue - 1);
    }];

    RAC(self.windButton.enabled) = [RACSignal
                              combineLatest:@[windingSignal, maxWindingSignal]
                              reduce:^(NSNumber *winding, NSNumber *maxWinding) {
                                  return @(winding.intValue < maxWinding.intValue);
                              }];


    RAC(self.unwindButton.enabled) = [RACSignal
                               combineLatest:@[windingSignal, minWindingSignal]
                               reduce:^(NSNumber *winding, NSNumber *minWinding) {
                                   return @(winding.intValue > minWinding.intValue);
                               }];
}
#导入“ViewController.h”
@界面视图控制器()
@特性(强、非原子)NSNumber*绕组;
@属性(强,非原子)NSNumber*minWinding;
@属性(强,非原子)NSNumber*maxWinding;
@属性(弱、非原子)IBUIButton*windButton;
@属性(弱,非原子)IBUIButton*unwindButton;
@属性(弱,非原子)IBUILabel*windingLabel;
@结束
@实现视图控制器
-(无效)viewDidLoad
{
[超级视图下载];
自绕组=@0;
self.minWinding=@0;
self.maxWinding=@15;
RACSignal*windingSignal=RACAble(自卷绕);
RACSignal*maxWindingSignal=RACAble(self.maxWinding);
RACSignal*minWindingSignal=RACAble(self.minWinding);
RAC(self.windingLabel.text)=[windingSignal映射:^id(NSNumber*winding){
返回值;
}];
[[self.windButton rac_信号用于控制事件:UIControlEventTouchUpInside]
subscribeNext:^(id发送者){
self.winding=@(self.winding.integerValue+1);
}];
[[self.unwindButton rac_信号用于控制事件:UIControlEventTouchUpInside]
subscribeNext:^(id发送者){
self.winding=@(self.winding.integerValue-1);
}];
RAC(self.windButton.enabled)=[RAC信号
组合测试:@[windingSignal,maxWindingSignal]
减少:^(NSNumber*绕组,NSNumber*最大绕组){
返回@(winding.intValueminWinding.intValue);
}];
}

我的问题是按钮永远不会被禁用。

我必须使用
RACAbleWithStart
以初始值预填充信号,因为
combinelateest
方法会等待,直到每个提供的信号都有某个值

RACSignal *windingSignal = RACAbleWithStart(self.winding);
RACSignal *maxWindingSignal = RACAbleWithStart(self.maxWinding);
RACSignal *minWindingSignal = RACAbleWithStart(self.minWinding);

我不得不使用
RACAbleWithStart
来预填充带有初始值的信号,因为
combinelatetest
方法一直等到每个提供的信号都有一些值

RACSignal *windingSignal = RACAbleWithStart(self.winding);
RACSignal *maxWindingSignal = RACAbleWithStart(self.maxWinding);
RACSignal *minWindingSignal = RACAbleWithStart(self.minWinding);
RAC()宏至少接受两个参数

签出

RAC()宏至少接受两个参数


查看

回到过去,一个arg就足够了:-)你解决问题了吗?我能为您效劳吗?我应该用最新版本的ReactiveCocoa为您编写一个演示代码吗?回到过去,一个参数就足够了:-)您解决了问题吗?我能为您效劳吗?我应该为您编写一个最新版本的演示代码吗?