4

UIButton添加了一个视图。我的视图也有三个文本框,即。用户名密码确认密码。基于这些文本框的合法内容,我需要启用我的注册按钮。

这是我的代码片段:-

    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

在最后一行,我收到两个错误:-

  1. ARC不允许将'BOOL'(又名'signed char')隐式转换为'id'
  2. 预期标识符

我是 Reactive Cocoa 的新手。请忽略错误。

4

2 回答 2

8

使用RAC(signUp, enabled)而不是RAC(signUp.enabled). 该RAC宏至少需要两个参数,即您要绑定的对象和键路径。

于 2013-11-28T21:14:12.530 回答
5

RAC()宏至少需要两个参数,即目标对象和该对象上的有效键路径。

像这样:

RAC(signUp, enabled) = formValid;

你正在传递它signUp.enabled,它是一个单一的项目,并且恰好是一个BOOL,而不是一个对象。宏展开后,将BOOL传递给需要对象参数的方法,因此编译器会抱怨:

[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:signUp.enabled nilValue:<#garbage#>][@keypath(signUp.enabled, nil)]
于 2013-11-28T21:14:27.370 回答