Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enabling an UIButton using Reactive Cocoa RACSignal

I have a UIButton added to a view. My view also has three text box viz. username, password and confirmPassword. Based on the legitimate content of these text box, I need to enable my signUp button.

Here is my code snippet :-

    UIButton *signUp = [[UIButton alloc]initWithFrame:CGRectMake(10, 100, 50, 20)];
    signUp.backgroundColor = [UIColor greenColor];

    signUp.enabled = NO ;
    [self.view addSubview:signUp];

    RACSignal *formValid = [RACSignal
    combineLatest:@[
    username.rac_textSignal,
    password.rac_textSignal,
    confirmPassword.rac_textSignal
    ]
    reduce:^(NSString *username, NSString *password, NSString *passwordVerification)        {
    return @([username length] > 0 && [password length] > 8 && [password      isEqual:passwordVerification]);
    }];

    RAC(signUp.enabled) = formValid; //Error is here

In the last line, I'm getting two errors:-

  1. Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC
  2. Expected identifier

I am new to Reactive Cocoa. Please ignore the mistakes.

like image 855
TryinHard Avatar asked Dec 12 '22 09:12

TryinHard


2 Answers

Use RAC(signUp, enabled) instead of RAC(signUp.enabled). The RAC macro takes at least two arguments, the object and the keypath you are binding.

like image 163
Jan Christiansen Avatar answered Dec 13 '22 21:12

Jan Christiansen


The RAC() macro takes two arguments at a minimum, the object that's the target and a valid keypath on that object.

Like so:

RAC(signUp, enabled) = formValid;

You're passing it signUp.enabled, which is a single item, and happens to be a BOOL, not an object. After the macro is expanded, the BOOL is passed to a method that expects an object argument, so the compiler complains:

[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:signUp.enabled nilValue:<#garbage#>][@keypath(signUp.enabled, nil)]
like image 32
jscs Avatar answered Dec 13 '22 22:12

jscs