我有一个使用这个信号的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];
}有什么建议吗?
发布于 2015-03-05 16:57:42
我认为take:信号运算符可以在这里使用。它返回一个信号,该信号在原始信号发送n next值后立即完成:
- (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];
}发布于 2015-03-05 20:55:29
真正的问题是RACObserve。仅当对象被释放时,RACObserve才会发送complete。
我不得不改变我的信号来完成我想要的任务。
https://stackoverflow.com/questions/28863195
复制相似问题