1

私はReactive Cocoaに頭を悩ませようとしていRAC(self.windButton.enabled)ます.セクション(下部)を除いてすべて正常に動作し、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);
                               }];
}

私の問題は、ボタンが無効にならないことです。

4

2 に答える 2

1

メソッドは提供されたすべてのシグナルが何らかの値を持つまで待機するRACAbleWithStartため、シグナルに初期値を事前に入力する必要がありました。combineLatest

RACSignal *windingSignal = RACAbleWithStart(self.winding);
RACSignal *maxWindingSignal = RACAbleWithStart(self.maxWinding);
RACSignal *minWindingSignal = RACAbleWithStart(self.minWinding);
于 2013-09-01T22:25:36.510 に答える
0

RAC() マクロは、少なくとも 2 つの引数を取ります。

この質問をチェックしてください

于 2014-02-13T16:15:59.990 に答える