2012-08-05 13 views
9

के बजाय _NSCFData ऑब्जेक्ट देता है I AFHTTPClient के उदाहरण पर निम्न संदेश भेज रहा हूं। मैं उम्मीद करता हूं कि सफलता ब्लॉक को फाउंडेशन ऑब्जेक्ट (एक शब्दकोश) भेजा जाए लेकिन डीबगर मुझे दिखाता है कि JSON एक _NSCFData ऑब्जेक्ट है। This question on SO बताता है कि मुझे 'एप्लिकेशन/जेसन' पर स्वीकृति शीर्षलेख सेट करने की आवश्यकता है। खैर, मैं ऐसा कर रहा हूं लेकिन AFNetworking अभी भी प्रतिक्रिया निकाय में JSON को डीकोड नहीं कर रहा है। यदि मैं एनएसजेएसओएसरियलाइजेशन का उपयोग करके खुद जेसन को डीकोड करता हूं तो मुझे उम्मीद है कि मुझे एनएस डिक्शनरी मिलती है। मैं क्या गलत कर रहा हूं?AFNetworking JSON

[client setDefaultHeader:@"Accept" value:@"application/json"]; 
[client postPath:@"/app/open_connection/" 
    parameters:params 
    success:^(AFHTTPRequestOperation *operation, id JSON) { 
     NSLog(@"successful login! %@", [JSON valueForKeyPath:@"status"]); 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"error opening connection"); 
     NSAlert *alert = [NSAlert alertWithError:error]; 
     [alert runModal]; 
    } 
]; 

नोट: मैं Django का उपयोग कर पायथन में सर्वर प्रोग्रामिंग कर रहा हूं। प्रतिक्रिया का सामग्री प्रकार 'एप्लिकेशन/जेसन'

+3

जोड़ने का प्रयास करें [ग्राहक registerHTTPOperationClass: [AFJSONRequestOperation वर्ग]]; –

उत्तर

3

इसे आज़माएं ... मुझे लगता है कि आपकी क्लाइंट सेटिंग्स में कुछ गड़बड़ हो सकती है।

NSMutableURLRequest *request = [client requestWithMethod:@"POST" path:@"/app/open_connection/" parameters:params]; 

AFJSONRequestOperation *operation = 
[AFJSONRequestOperation JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     NSLog(@"successful login! %@", [JSON valueForKeyPath:@"status"]); 
    } 
    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     NSLog(@"error opening connection"); 
     NSAlert *alert = [NSAlert alertWithError:error]; 
     [alert runModal]; 
}]; 
[operation start]; 
+0

यह काम करता है, इसलिए यह मेरे AFHTTPClient की कॉन्फ़िगरेशन में एक समस्या होनी चाहिए। –

+0

मेरे लिए, समस्या यह थी कि सामग्री को टेक्स्ट/एचटीएमएल के रूप में वापस किया जा रहा था। सबसे पहले, मैंने सोचा कि मैं पाठ/एचटीएमएल जोड़ने के लिए स्वीकार्य सामग्री प्रकार को संशोधित कर सकता हूं, लेकिन फिर भी इसका परिणाम एनएससीएफ डेटा में हुआ क्योंकि जाहिर है कि इसे उचित माइम प्रकार में होना आवश्यक है ताकि सामग्री को एक बड़े ब्लॉब के बजाय जेएसओएन के रूप में सही ढंग से पार्स किया जा सके। पाठ का – user1214836

6

आप AFHTTPClient और एक JSON एपीआई के साथ काम कर रहे हैं, तो आप आम तौर पर इन सेटिंग्स के सभी तीन सेट करने के लिए की आवश्यकता होगी:

httpClient.parameterEncoding = AFJSONParameterEncoding; 
[httpClient setDefaultHeader:@"Accept" value:@"application/json"]; 
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

अब जब आप अपने ग्राहक का उपयोग कर अनुरोध करने, यह पता चल जाएगा जेएसओएन के रूप में प्रतिक्रिया का विश्लेषण करने के लिए।

[httpClient postPath:@"/app/open_connection/" 
      parameters:params 
      success:^(AFHTTPRequestOperation *operation, id response) { 
       NSLog(@"JSON! %@", response); 
      } 
      failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      }]; 

यहां एक चाल है जिसे मैंने खोजा है। NSError वस्तु में आप यह पार्स और त्रुटि संदेश को पुनः प्राप्त (यदि HTTP प्रतिसाद एक JSON त्रुटि संदेश था) कर सकते हैं:

failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSDictionary *JSON = 
    [NSJSONSerialization JSONObjectWithData: [error.localizedRecoverySuggestion dataUsingEncoding:NSUTF8StringEncoding] 
            options: NSJSONReadingMutableContainers 
             error:nil]; 
      failureCallback(JSON[@"message"]); 
} 
+0

पता नहीं लगा सका क्यों AFHTTPClient एनएससीएफडेटा लौटा रहा था - "एप्लिकेशन/जेसन" सेट नहीं किया गया था। आपको बहुत - बहुत धन्यवाद! – r00m

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