RACSignal结合

时间:2015-03-04 19:29:49

标签: ios objective-c reactive-cocoa

我有一个使用此信号的RACCommand:

- (RACSignal *)getProductsSignal {
  return [[RACSignal combineLatest:@[self.currentCategorySignal, self.client.getProducts] reduce:^id(Category *category, NSArray *products) {
    return [[products.rac_sequence filter:^BOOL(Product *product) {
      return [product belongsToCategory:category];
    }] array];
  }];
}

我遇到的问题是信号永远不会发送完成,因此,在第一次按下后,与命令绑定的按钮将被禁用。

- (RACSignal *)currentCategorySignal {
  return RACObserve(self, currentCategory);
}

getProducts看起来像这样

- (RACSignal *)getProducts {
  NSString *path = @"/products"];

  return [[[[self.manager rac_GET:path parameters:nil]
  replayLazily]
  parseResponseForClass:[TPProduct class]]
  transformError];
}

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为take:信号运算符可以在这里使用。它返回一个信号,该信号在原始信号发送n下一个值时立即完成:

- (RACSignal *)getProductsSignal {
  return [[RACSignal combineLatest:@[self.currentCategorySignal, self.client.getProducts] reduce:^id(Category *category, NSArray *products) {
    RACSignal *productsSignal = [[products.rac_sequence filter:^BOOL(Product *product) {
      return [product belongsToCategory:category];
    }] array];
  }];
  [return productsSignal take:1];
}

答案 1 :(得分:0)

实际问题出在RACObserve上。 RACObserve仅在取消分配对象时发送完整。

不得不改变我的信号来执行我想要的任务。