我有一个使用此信号的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];
}
有什么建议吗?
答案 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仅在取消分配对象时发送完整。
不得不改变我的信号来执行我想要的任务。