首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RACSignal组合

RACSignal组合
EN

Stack Overflow用户
提问于 2015-03-05 03:29:49
回答 2查看 601关注 0票数 0

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

代码语言:javascript
复制
- (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];
  }];
}

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

代码语言:javascript
复制
- (RACSignal *)currentCategorySignal {
  return RACObserve(self, currentCategory);
}

getProducts看起来像这样

代码语言:javascript
复制
- (RACSignal *)getProducts {
  NSString *path = @"/products"];

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

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-03-05 16:57:42

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

代码语言:javascript
复制
- (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
EN

Stack Overflow用户

发布于 2015-03-05 20:55:29

真正的问题是RACObserve。仅当对象被释放时,RACObserve才会发送complete。

我不得不改变我的信号来完成我想要的任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28863195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档