Reactivecocoa: 信号触发两次,distinctUntilChanged 不捕获重复项

创建于 2013-12-20  ·  3评论  ·  资料来源: ReactiveCocoa/ReactiveCocoa

好吧,这里有点困惑。

我的viewModel有一个属性searchString ,我验证它只设置一次。 但是这会被触发两次,进行两次 api 调用。 别介意它不应该触发两次,但那里甚至有一个distinctUntilChanged也不能阻止它。 如果我在map放置一个断点,它肯定会以相同的值命中两次queryString

RACSignal *searchResultsSignal = [[[[[[[[RACObserve(self, searchString)
    ignore:nil]
    ignore:@""]
    distinctUntilChanged]
    deliverOn:[RACScheduler scheduler]]
    map:^id (NSString *queryString) {
        @strongify(self);
        TCThirdPartyAPIType type = [TCAPIIndividual thirdPartyAPITypeForAPITypeString:self.activeAPI.APITypeString];
        return [TCThirdPartyAPIHelper fetchResultsForAPIType:type withQueryString:queryString latitude:self.latitude longitude:self.longitude];
    }]
    switchToLatest]
    map:^id(TCAPIResponse *response) {
        return response.result.array;
    }] catch:^RACSignal *(NSError *error) {
        return [RACSignal return: @[]];
    }];

忘了说,如果我直接订阅RACObserve(self, searchString)并插入断点,那只会捕获一次。

question

最有用的评论

你的评论救了我的命 :D

所有3条评论

拉屎。 没关系。 订阅了两次。

你的评论救了我的命 :D

我以前遇到过这个问题,我使用 uitextfiled,当我听文本时,信号触发两次,因为 uitextfiled isFirstResponder 改变了,当 isFirstResponder 没有被触发时,是 YES 被触发

此页面是否有帮助?
0 / 5 - 0 等级