J'ai un signal que, fondamentalement, il demande une configuration en utilisant NSRULSession. Quand je fais un subscribeNext, la requête est parfaitement correcte, mais pour la deuxième fois cette requête n'est plus nécessaire. Comment pourrais-je l'éviter?Évitez les demandes http répétées sur ReactiveCocoa
Répondre
Un signal de temps pouvait être effectué via l'opérateur take:
. Vous avez juste besoin de passer un argument pour le nombre de fois requis pour effectuer un signal. Après une telle quantité d'exécutions, cette passerelle sera complètement fermée et aucune donnée supplémentaire ne sera transmise dans le bloc subscribeNext:
. Dans votre cas, ce montant serait égal 1.
RACSignal *requestConfigurationSignal = ...
[[requestSignal
take:1]
subscribeNext:^(id value){
NSLog(@"Request in progress")
}]
On dirait qu'ils veulent pouvoir s'abonner plusieurs fois mais ne faire qu'une seule requête web. Autrement dit, ils veulent que le résultat soit mis en cache. C'est là que les opérateurs de rejeu sont utiles. – powerj1984
Votre signal faire son travail chaque fois qu'il est abonné à moins que vous faites quelque chose explicite pour empêcher cela. On dirait que ce que vous voulez ici est l'opérateur replayLast
. Cet opérateur mettra en cache la dernière valeur émise de votre signal et l'émettra lorsque votre signal sera à nouveau souscrit au lieu de refaire le travail initial.
Lire sur les opérateurs « replay » ici: http://spin.atomicobject.com/2014/06/29/replay-replaylast-replaylazily/
Utilisez une propriété et une action dont les valeurs sont liées à cette propriété. Ensuite, ne déclenchez l'action que si nécessaire pour actualiser la valeur de la propriété.
Pourriez-vous fournir le code source associé à la question? – skyylex