【问题标题】:RACSignal combineRAC信号组合
【发布时间】:2015-03-04 19:29:49
【问题描述】:

我有一个使用此信号的 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];
}

有什么建议吗?

【问题讨论】:

    标签: ios objective-c reactive-cocoa


    【解决方案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];
    }
    

    【讨论】:

      【解决方案2】:

      实际问题出在 RACObserve。 RACObserve 仅在对象被释放时发送完成。

      必须改变我的信号来执行我想要的任务。

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多