反应性文本字段信号不会在删除时触发

Reactive textfield signal doesn't fire on delete

我有一个 UITextField 并尝试对 textField.text 变化做出反应:

self.textField.delegate = self;
[self.textField.rac_textSignal map:^id(NSString *text) {
     return @(YES); // breakpoint here
}];

我运行通过tutorial学习ROC。我注意到,当我输入新字符时会调用该块,但当我删除旧字符时不会调用该块。如何修复它..?我希望在删除前一个字符时调用该操作。


例如:左边是里面的东西 textField.text,右边是发生了什么:


免责声明:因为我只是在学习这个框架,不想在不同版本上迈出第一步,所以我使用相同版本的 ROC如教程中所示:

pod 'ReactiveCocoa', '2.1.8'

您可以查看此代码是否运行良好,而不是您的代码。

[self.usernameTextField.rac_textSignal subscribeNext:^(id x) {
  NSLog(@"%@", x);
}];

不同之处在于我的代码有一个 subscribeNext: 方法调用。 这里的基本概念是你需要 订阅 来执行你的代码。 map: 是仅当数据到达时才更改输入数据的运算符。 subscribeNext: / subscribeCompleted: / subscribeError: 是强制信号向 ReactiveCocoa 中的链发送数据的根本原因。

也许你应该阅读 ReactiveCocoa 团队的 official framework overview

更新:

对于目前的情况,将 subscribeNext 应用到最后将解决问题:

[[self.usernameTextField.rac_textSignal 
   map:^id(id x) { 
     NSLog(@"%@", x);
     return x;
}] 
   subscribeNext:^(id x) { 
     NSLog(@"%@", x); 
}];