2013-05-11 15 views
10

मैं एक आरईएसटी एपीआई के साथ बातचीत करने के लिए रेस्टकिट का उपयोग करता हूं। कुछ क्रियाओं के लिए, जैसे कि HTTP PUT/POST/DELETE, मुझे केवल प्रतिक्रिया स्थिति कोड (200, या 500 आदि) की परवाह है, और प्रतिक्रिया डेटा के बारे में परवाह नहीं है, भले ही एपीआई डेटा वापस भेजता है।RestKit प्रतिक्रिया को मानचित्र कैसे न करें?

प्रदर्शन पर विचार के लिए, वहाँ RestKit कॉन्फ़िगर करने के लिए प्रतिक्रिया मानचित्रण से बचने के लिए एक रास्ता है? ऐसा लगता है कि अगर मैं एक प्रतिक्रिया वर्णनकर्ता मैं त्रुटि हो रही है की स्थापना की नहीं है,

उत्तर

5

नहीं "कोई जवाब नहीं वर्णनकर्ता प्रतिक्रिया लोड से मेल" के रूप में त्रुटि पता चलता है कि आप कुछ प्रतिक्रिया वर्णनकर्ता परिभाषित की जरूरत है। इसे जटिल होने की आवश्यकता नहीं है (यह एक एनएस डिक्शनरी में स्टेटस फ्लैग जैसे एक डेटा आइटम को मैप कर सकता है)।

प्रदर्शन के बारे में चिंता मत करो जब तक आप करने के लिए (रूपरेखा एक समस्या से पता चलता) कारण है।

यह कहा गया है कि, रीस्टकिट को चलाने के लिए सबसे प्रभावी तरीका (रनटाइम पर) के पास खोज करने के लिए एकाधिक प्रतिक्रिया वर्णनकर्ता नहीं हैं, इसलिए पथ पैटर्न और कीपैथ के साथ जितना विशिष्ट हो सके उतना सटीक होना चाहिए।

8

आप वस्तुओं और न ही नक्शा वस्तुओं पैरामीटर का अनुरोध करने के लिए प्रतिक्रिया डेटा को मैप करने की जरूरत नहीं है, तो आप AFHTTPClient है, जो है क्या 0.20 का उपयोग करता है वैसे भी RestKit का उपयोग करने में रुचि हो सकती है। आप AFHTTP क्लाइंट ऑब्जेक्ट तक पहुंच सकते हैं जो कि RestKit स्वयं उपयोग करता है, इसलिए आपको फिर से बेस यूआरएल या प्रमाणीकरण हेडर आदि सेट अप करने की आवश्यकता नहीं है।

यहाँ एक सरल प्राप्त उदाहरण है:

[[[RKObjectManager sharedManager] HTTPClient] getPath:@"http://example.com" 
              parameters:nil 
               success:^(AFHTTPRequestOperation *operation, id responseObject) { 
                // handle success 
               } 
               failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
                // response code is in operation.response.statusCode 
               }]; 
+0

हालांकि यह एक अच्छा समाधान नहीं है, तब भी आप वस्तु को नष्ट करना होगा अनुरोध सफल होने के बाद मैन्युअल रूप से मूल डेटा से, इसलिए Reskit की शक्ति को खोना। मैंने अभी भी मतदान किया है, लेकिन [NSNull क्लास] के साथ उपरोक्त उत्तर सबसे अच्छा जवाब जैसा लगता है। –

+0

वास्तव में के बाद से इस दृष्टिकोण AFHTTPClient का उपयोग करता है, प्रतिक्रिया कोर डेटा में कुछ भी करने के लिए मैप किया नहीं किया जाएगा तो वहाँ कुछ भी नहीं है मैन्युअल रूप से सफलता के बाद हटाना आवश्यक है कि है। हालांकि RestKit से HTTP क्लाइंट ऑब्जेक्ट का उपयोग करने के लिए एक नया नकारात्मक पक्ष है: AFNetworking 2.0 में AFHTTPClient नहीं है। हालांकि RestKit अभी भी AFNetworking 1.3 का उपयोग कर रहा है, फिर भी यह अंततः अपडेट हो जाएगा और बहिष्कृत HTTP क्लाइंट को इंगित करने की संभावना बाद में माइग्रेशन प्रयास में शामिल हो जाएगी। – nioq

+0

मेरा बुरा, मेरा मतलब था, मैपिंग नहीं किया जाएगा, इसलिए आपको इसे मैन्युअल रूप से करना होगा। हटाए गए टिप्पणी को रद्द करें (मैं अपने कोड में बहुत अधिक था), मेरा मतलब था कि आपने जो कहा था –

19

मेरे समाधान के लिए सिर्फ एक मानचित्रण का इस्तेमाल किया गया एक NSObject

RKObjectMapping * emptyMapping = [RKObjectMapping mappingForClass:[NSObject class]]; 
RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:emptyMapping 
                         method:RKRequestMethodPOST 
                        pathPattern:API_SURVEY_UPLOAD keyPath:nil 
                        statusCodes:[NSIndexSet indexSetWithIndex:200]]; 
[objectManager addResponseDescriptor:responseDescriptor]; 
+0

हां यह काम करता है, लेकिन RestKit अभी भी एक त्रुटि (क्रैश किए बिना) लॉग करता है, "dding मैपिंग त्रुटि: किसी भी विशेषता के लिए कोई मैप करने योग्य मान नहीं मिला या रिलेशनशिप मैपिंग्स "- क्या कुछ और सुरुचिपूर्ण नहीं है? –

+6

इसके बजाय [NSNull क्लास] का उपयोग करें, जो चेतावनी को हटा देना चाहिए –

संबंधित मुद्दे