因此,当我尝试获取某些数据时,RACCommand会返回此错误。
我有一个选择器,例如当用户滚动它时,app从服务器获取数据并显示它们,但是如果用户快速滚动,(之前的操作正在进行中)RACCommand会收到此错误:
Error Domain=RACCommandErrorDomain Code=1 "The command is disabled and cannot be executed" UserInfo={RACUnderlyingCommandErrorKey=<RACCommand: 0x174280050>, NSLocalizedDescription=The command is disabled and cannot be executed}
我知道,它与一些取消机制有关,但我尝试了很多例子而且效果不好。
我的代码:
@weakify(self);
[[[self.viewModel makeCommand] execute:nil]
subscribeError:^(NSError *error) {
@strongify(self);
[self showAlertWithError:error];
}];
和viewModel:
- (RACCommand*)makeCommand {
if (!_makeCommand) {
_makeCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [self getVehicleMake];
}];
}
return _makeCommand;
}
- (RACSignal*)getVehicleMake {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[[self.forumService getForumMakesWithYear:@([self.selectedYear integerValue])
category:self.vehicleCategory]
subscribeNext:^(RACTuple *result) {
self.makes = result.first;
[subscriber sendNext:self.makes];
} error:^(NSError *error) {
[subscriber sendError:error];
} completed:^{
[subscriber sendCompleted];
}];
return [RACDisposable disposableWithBlock:^{
}];
}];
}
答案 0 :(得分:0)
RACCommand
默认情况下不允许并发执行。当它正在执行时,它将被禁用。如果您再次尝试执行,它将发送该错误。
但是您可以测试该错误 - RACCommand
有RACCommandErrorDomain
和RACCommandErrorNotEnabled
常量可用。
@weakify(self);
[[[self.viewModel makeCommand] execute:nil]
subscribeError:^(NSError *error) {
@strongify(self);
if ([error.domain isEqual:RACCommandErrorDomain] && error.code == RACCommandErrorNotEnabled) {
return;
}
[self showAlertWithError:error];
}];