मैं इस बिंदु तक थोड़ी देर के लिए RestKit 0.10.0 का उपयोग कर रहे हैं और ऊपर, मैं सिर्फ अपने सर्वर से धारावाहिक वस्तुओं तैनात। लेकिन अब मुझे कुछ क्वेरी पैरामीटर के साथ सर्वर को एक GET अनुरोध करने की आवश्यकता है। पहले स्वाभाविक बात है कि मन में आया भी ऐसा ही करने के लिए गया था के रूप में मैं पोस्टिंग वस्तुओं के लिए किया था:RestKit प्राप्त क्वेरी पैरामीटर
- वस्तु क्वेरी encapsulating के लिए एक क्रमबद्धता मानचित्रण पैरामीटर
- वस्तु के लिए एक प्रतिक्रिया मानचित्रण नहीं बना से प्राप्त की जा रही बनाने usingBlock (postObject के बजाय: usingBlock) सर्वर
- को परिभाषित करने और RKRequestMethodGET (बजाय RKRequestMethodPOST) के लिए एक रूटर का उपयोग
- GetObject का उपयोग कर अनुरोध करना
मैं जल्द ही पता चला इस तरह से यह करने के लिए तो उपलब्ध संसाधनों (RestKit Wiki, RestKit Google group) खोज करने के बाद मैं अब दो समाधान वैध के रूप में माना के बारे में पता नहीं है,:
- संसाधन पथ के लिए क्वेरी पैरामीटर जोड़।
यह पूरी तरह से काम करता है।
NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
token, @"accessToken",
[NSNumber numberWithInt:level], @"level",
[NSNumber numberWithInt:count], @"count",
nil];
NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
}];
- लोडर ब्लॉक में क्वेरी पैरामीटर की स्थापना।
यह क्वेरी पैरामीटर नहीं भेजता है।
RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
loader.params = params;
}];
मेरे प्रश्न हैं:
- क्यों नहीं दूसरा समाधान काम करता है?
- लोडर.targetObject को शून्य पर सेट किए बिना पहला समाधान क्यों काम कर रहा है, हालांकि मेरे पास JSON प्रतिक्रिया में कोई रूट कुंजी पथ नहीं है?
- ऐसे मामले क्या हैं जहां मुझे getObject का उपयोग करना चाहिए: ब्लॉक विधि का उपयोग करना? इसका उद्देश्य क्या उद्देश्य है?
- मुझे लोडर.परैम का उपयोग करने के लिए क्या करना चाहिए? wiki से ऑब्जेक्ट मैपिंग ट्यूटोरियल का कहना है कि इस प्रॉपर्टी का उपयोग POST पैरामीटर को समाहित करने के लिए किया जा सकता है, लेकिन मुझे पॉइंट नहीं दिखाई देता है क्योंकि मैं विधि पोस्ट ऑब्जेक्ट के साथ भेजे जा रहे क्रमबद्ध ऑब्जेक्ट में पैरामीटर को लपेट सकता हूं: ब्लैक का उपयोग करना।
धन्यवाद।
[बाद में संपादित]
मेरी दूसरी सवाल का जवाब के बारे में: मैं लोडर ब्लॉक में नहीं के बराबर करने के लिए targetObject की स्थापना किया गया है जब पोस्ट अनुरोध बनाने beacause अन्यथा RestKit प्रतिक्रिया के लिए भेजने वस्तु मैपिंग का उपयोग की कोशिश करेंगे (संबंधित चर्चा के लिए यह link देखें)। लेकिन चूंकि मैं loadObjectsAtResourcePath का उपयोग कर रहा हूं: ब्लॉक का उपयोग करके: कोई ऑब्जेक्ट नहीं भेजा जा रहा है, इसलिए प्रतिक्रिया स्वाभाविक रूप से सेट लक्ष्य के बिना प्रतिक्रिया मैपिंग पर मैप करेगी।
धन्यवाद। जीईटी/हेड अनुरोध के बारे में स्पष्टीकरण बहुत उपयोगी है। –
धन्यवाद, यह एक को छोड़कर, मेरी सभी गलतफहमी को स्पष्ट करता है। आपने कहा GetObject: useBlock: केवल एक सुविधा विधि है जो GET का उपयोग करके ऑब्जेक्ट लोड अनुरोध भेजती है। यह loadObjectsAtResourcePath की परिभाषा की तरह लगता है: ब्लॉक का उपयोग:। GetObject में :ब्लॉकब्लॉक का उपयोग करके: किसी ऑब्जेक्ट को पहले पैरामीटर के रूप में निर्दिष्ट करना होगा और मुझे समझ में नहीं आता कि यह उपयोगकर्ता क्या है, क्योंकि मैं केवल एक पीईटी या पोस्ट नहीं कर रहा हूं। –
उदाहरण के लिए, यदि आपके पास पहले से कोई ऑब्जेक्ट है, तो आप नवीनतम डेटा (अपडेट) प्राप्त कर सकते हैं, या आप संसाधन पथ तक पहुंच सकते हैं - दोनों एक ही काम करते हैं। आप जिस भी तरह से पसंद करते हैं/आसान है। –