【问题标题】:Enabling an UIButton using Reactive Cocoa RACSignal使用 Reactive Cocoa RACSignal 启用 UIButton
【发布时间】:2013-11-28 12:58:51
【问题描述】:

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

这是我的代码 sn-p :-

    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 的新手。请忽略错误。

【问题讨论】:

  • 看来显示的代码是正确的。我认为您的问题出在其他地方。
  • 您的代码在旧版本的 ReactiveCocoa 中正确的,对于当前版本,请参阅下面的答案。
  • 你必须输入 rac 行这可以对堆栈元素进行碎片整理

标签: ios objective-c uibutton reactive-programming reactive-cocoa


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    像这样:

    RAC(signUp, enabled) = formValid;
    

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

    [[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:signUp.enabled nilValue:<#garbage#>][@keypath(signUp.enabled, nil)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多