के साथ यूआई अपडेट ट्रैक करने के लिए ReactiveCocoa का उपयोग करके मैं एक आईओएस ऐप बना रहा हूं जो आपको अपने डेस्कटॉप पर खेलने वाले ऐप में संगीत को दूरस्थ रूप से नियंत्रित करने देता है।दूरस्थ ऑब्जेक्ट
सबसे कठिन समस्याएं "ट्रैकर" (जो वर्तमान में बजाने वाले गीत की समय स्थिति और अवधि दिखाती है) की स्थिति को अपडेट करने में सक्षम है। यहां इनपुट के कई स्रोत हैं:
- लॉन्च पर, रिमोट वर्तमान में बजाने वाले गीत की प्रारंभिक स्थिति और अवधि प्राप्त करने के लिए नेटवर्क अनुरोध भेजता है।
- जब उपयोगकर्ता रिमोट का उपयोग कर ट्रैकर की स्थिति समायोजित करता है, तो यह संगीत ऐप को गीत की स्थिति बदलने के लिए नेटवर्क अनुरोध भेजता है।
- यदि उपयोगकर्ता ट्रैकर की स्थिति बदलने के लिए डेस्कटॉप पर ऐप का उपयोग करता है, तो ऐप ट्रैकर की नई स्थिति के साथ रिमोट को नेटवर्क अनुरोध भेजता है।
- यदि गीत वर्तमान में चल रहा है, तो ट्रैकर की स्थिति हर 0.5 सेकंड या उससे भी अधिक अपडेट की जाती है।
फिलहाल, ट्रैकर एक यूआईएसलाइडर है जिसे "प्लेयर" मॉडल द्वारा समर्थित किया जाता है। जब भी उपयोगकर्ता स्लाइडर पर स्थिति में परिवर्तन, यह मॉडल अद्यतन करता है और एक नेटवर्क अनुरोध भेजता है, तो जैसे:
NowPlayingViewController.m
[[slider rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UISlider *x) {
[playerModel seekToPosition:x.value];
}];
[RACObserve(playerModel, position) subscribeNext:^(id x) {
slider.value = player.position;
}];
में PlayerModel.m में:
@property (nonatomic) NSTimeInterval position;
- (void)seekToPosition:(NSTimeInterval)position
{
self.position = position;
[self.client newRequestWithMethod:@"seekTo" params:@[positionArg] callback:NULL];
}
- (void)receivedPlayerUpdate:(NSDictionary *)json
{
self.position = [json objectForKey:@"position"]
}
समस्या तब होती है जब कोई उपयोगकर्ता स्लाइडर के साथ "fiddles" करता है, और कई नेटवर्क अनुरोधों को कतार देता है जो सभी अलग-अलग समय पर वापस आते हैं। प्रतिक्रिया प्राप्त होने पर उपयोगकर्ता स्लाइडर को फिर से ले जा सकता था, स्लाइडर को पिछले मान पर वापस ले जाया जा सकता था।
मेरा प्रश्न: मैं इस उदाहरण में रीएक्टिव कोको का सही तरीके से उपयोग कैसे करूं, यह सुनिश्चित कर रहा हूं कि नेटवर्क से अपडेट का सामना किया जा रहा है, लेकिन केवल तभी उपयोगकर्ता ने स्लाइडर को स्थानांतरित नहीं किया है?