मैं their example में सुझाए गए सिंगलटन मॉडल के साथ AFNetworking का उपयोग कर रहा हूं।बदलना AFNetworking baseURL
+ (SGStockRoomHTTPClient *)sharedClient
{
static SGStockRoomHTTPClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
NSString *baseUrlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"server_root_url_preference"];
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:baseUrlString]];
});
return _sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"text/html"];
return self;
}
आरंभिक उपयोगकर्ता डिफ़ॉल्ट से लिया गया बेसURL के साथ किया जाता है।
मेरी समस्या यह है कि बेसURL संपत्ति केवल पढ़ने के लिए है। यदि उपयोगकर्ता सेटिंग्स पर जाता है और बेसURL उपयोगकर्ता डिफ़ॉल्ट को बदलता है, तो मैं इसे अपने क्लाइंट में कैसे बदल सकता हूं?
बेसलर को बदलने की आवश्यकता के साथ मुझे एक और समान मामला एक एपीआई है जिसके लिए सही बेसURL को निर्धारित करने के लिए एकाधिक कॉल और तर्क की आवश्यकता होती है। और ऐप चल रहा है, जबकि बेस यूआरएल अभी भी बदल सकता है (उदाहरण के लिए उपयोगकर्ता नेटवर्किंग वातावरण में परिवर्तन करता है जो स्थानीय कनेक्शन से बाहरी प्रॉक्सी सर्वर के माध्यम से 3 जी कनेक्शन में परिवर्तन की आवश्यकता होती है।)।
मुझे लगता है कि बेसURL प्रॉपर्टी केवल पढ़ने के लिए क्यों है: नेटवर्क जैसी चीजें हैं जो पृष्ठभूमि में चलती हैं और उस सेटिंग से जुड़ी हैं। यह कहा गया है, यह एक सेटबेससेर विधि है जो निगरानी बंद कर देता है, मूल्य बदलता है, फिर फिर से निगरानी शुरू करता है ...
मुझे लगता है कि मेरा डिज़ाइन सही नहीं है, क्या मुझे इस मामले में सिंगलटन देना चाहिए और प्रत्येक बार बेसURL को बदलने के बाद क्लाइंट को फिर से बनाएं?
स्पष्ट करने के सवाल AFNetworking के लिए काफी विशिष्ट है: कैसे एक एपीआई कि एक निश्चित आधार यूआरएल लेकिन कुछ उपयोगकर्ता (या कार्यक्रम तर्क) निर्दिष्ट करना चाहिए की जरूरत नहीं है के साथ AFHTTPClient इस्तेमाल करना चाहिए? उपयोगकर्ता डिफ़ॉल्ट के साथ उदाहरण एक अच्छा है, उपर्युक्त कोड काम करता है लेकिन उपयोगकर्ता को परिवर्तन को सक्रिय करने के लिए ऐप को छोड़ना और पुनः लॉन्च करना होता है। – caiman
अच्छा सवाल! मुझे एक ही समस्या है। प्राथमिक सर्वर डाउन होने पर मुझे सर्वर को द्वितीयक सर्वर पर स्विच करना चाहिए। और स्विच जब वापस हो जाता है और फिर से चल रहा है। –