В настоящее время я создаю внутренний сигнал для вызова [Watchtower reportToServerWithBeaconRegionArraySignal:]
, потому что таким образом я могу передавать только next
и перехватывать сигналы завершения и ошибки, которые я не хочу распространять, потому что я хочу подписаться на дальнейшие сигналы от [self rangedBeaconsSignal]
.
Я уверен, что должен быть лучший способ, но я его не вижу: я пытался использовать catch:
(и возвращать [RACSignal empty]
из предоставленного там блока), но это только отлавливает ошибки, а не завершения.
(ps могу ли я просто проверить правильность использования [disposable dispose]
здесь? возможно, это избыточно):
[[[self rangedBeaconsSignal] flattenMap:^RACStream * (CLBeaconRegion *region) {
return [RACSignal createSignal:^RACDisposable * (id <RACSubscriber> subscriber) {
RACDisposable *disposable= [RACDisposable new];
[[Watchtower reportToServerWithBeaconRegionArraySignal:@[region] fromBackground:NO]
subscribeNext:^(id x) {
[subscriber sendNext:x];
} error:^(NSError *error) {
[disposable dispose];
} completed:^{
[disposable dispose];
}];
return disposable;
}];
}] subscribeNext:^(id x) {
NSLog(@"Sent beacon to server");
} error:^(NSError *error) {
// ideally errors might reach here, but I don't want to unsubscribe, so I'm ignoring them for now.
} completed:^{
}];