无法过滤RACSignal事件

时间:2014-11-07 15:13:43

标签: ios objective-c reactive-cocoa

我的ViewController包含一个UISearchBar并实现UISearchBarDelegate协议。我已为searchBartextDidChange:创建了subscribeNext正确触发的信号:

RACSignal *searchTextChangeSignal = [self rac_signalForSelector:@selector(searchBar:textDidChange:) fromProtocol:@protocol(UISearchBarDelegate)];

[searchTextChangeSignal subscribeNext:^(id x){
  // This works.
}];

此时,我想将此过滤器的结果过滤为1)仅包含大于3个字符的文本,以及2)300 ms的限制。我的尝试:

[[searchTextChangeSignal filter:^(RACTuple *tuple) {
  NSString *textEnteredIntoSearchBar = (NSString *)tuple.second;
  return textEnteredIntoSearchBar.length > 3;
}] throttle:300];```

上面的代码不起作用。块永远不会被执行。如果我将filter方法替换为subscribeNext,则subscribeNext执行。此外,XCode自动填充上面的filter方法,因此该方法可用。我有什么东西在这里失踪吗?这样做的正确方法是什么?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

缺少的理解是信号在订阅之前不会执行任何工作。在节流之后调用其中一个订阅方法,您将看到数据开始流过。