2014-05-01 2 views
2

J'ai une opération merge qui dépend du résultat de deux opérations asynchrones. La première est une opération de réseau, la seconde est un succès ou un échec de l'autorisation de localisation. Je me fiche des valeurs de ces opérations, juste que les deux ont terminé.ReactiveCocoa signaux asynchrones conditionnels

Voici ce qu'il ressemble à:

RACSignal *networkCallReturned = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:kNetworkCallReturned object:nil] take:1]; 
RACSignal *locationPermission = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:kLocationManagerGotLocationPermission object:nil] take:1]; 

@weakify(self); 
[[RACSignal merge:@[ networkCallReturned, locationPermission ] 
subscribeCompleted:^{ 
    @strongify(self); 

    // Do something else here 
}]; 

Le problème que j'ai est que l'appel réseau n'est pas fait quand je n'ai pas joignabilité. Ce n'est pas quelque chose que je peux changer non plus. Comment puis-je déclencher le signal networkCallReturned de manière conditionnelle si je n'ai pas d'accessibilité? Dois-je configurer un autre signal qui surveille l'accessibilité et prendre la première valeur envoyée par networkCallReturned ou par le signal d'accessibilité?

Répondre

2

Vous pouvez atteindre l'accessibilité du moniteur, mais il est tristement lourd de courses et de cas de bord. Il semble que vous seriez beaucoup mieux servi en attrapant les erreurs de ne pas être en mesure de terminer l'appel réseau, ou de temporiser l'appel réseau.

+0

OK, c'est logique. Je vais regarder dans d'autres méthodes, merci. – danielbeard