2012-02-27 15 views
7

मैं किसी URL से छवियों को लोड करने के लिए AFNetworking UIImageView कॉल उपयोग करने के लिए कोशिश कर रहा हूँ नीचे दिखाया गया है:AFNetworking + UIImageView प्लेसहोल्डर छवि दिखाता है, लेकिन नहीं यूआरएल छवि

[self.image setImageWithURL:[NSURL URLWithString:feed.imageURL] placeholderImage:  [UIImage imageNamed:@"logo"]]; 

प्लेसहोल्डर छवि हमेशा ऊपर से पता चलता है, लेकिन "feed.imageURL" की वास्तविक छवि कभी नहीं करती है। मैंने सत्यापित किया है कि यूआरएल वास्तव में सही है। मैंने यह सुनिश्चित करने के लिए भी कठोर परिश्रम किया, और अभी भी कुछ भी नहीं।

मेरा मूल ऐप सेटअप एक टैब नियंत्रक है ... और देखेंडिडलोड में, मैं एक विधि "fetchFeed" कहता हूं जो मेरे JSON डेटा को इकट्ठा करने के लिए HTTP अनुरोध करता है।

मेरा अनुरोध ब्लॉक लगता है:

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
             [self parseDictionary:JSON]; 
             isLoading = NO; 
             [self.tableView reloadData]; 

             } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
              NSLog(@"Error: %@", error); 
              [self showNetworkError]; 
              isLoading = NO; 
              [self.tableView reloadData]; 
             }]; 
operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 
[queue addOperation:operation]; 
+0

को संशोधित किए बिना यह समर्थन कर सकते हैं UITableViewCells भीतर आपकी छवियों हैं? क्या आप अपने 'cellForRowAtIndexPath' में 'setImageWithURL' को कॉल कर रहे हैं:' प्रतिनिधि विधि? – jonkroll

+0

हां, आपके दोनों प्रश्नों के लिए। –

+0

क्या आप उस कोड को शामिल कर सकते हैं जिसका उपयोग आप दूरस्थ छवियों को सेट करने के लिए करते हैं, 'tableView: cellForRowAtIndexPath:' में? – mattt

उत्तर

9

सर्वर मैं से content-type "image/jpg" भेज रही थी और डिफ़ॉल्ट AFNetworking द्वारा छवि अनुरोध कर रही थी इस फ़ाइल प्रकार का समर्थन नहीं करता बाहर कर देता है।

मैं AFImageRequestOperation में वर्ग पद्धति को बदल तरह देखने के लिए:

+ (NSSet *)defaultAcceptableContentTypes { 
return [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", @"image/jpg", nil]; 
} 

और यह मेरी समस्या तय।

+2

आपने मेरा दिन बनाया! AFNetworking 2.0 के लिए यह 'स्वयं है।स्वीकार्य सामग्री प्रकार = [[एनएसएसएटी आवंटन] initWithObjects: @ "image/tiff", @ "image/jpeg", @ "image/gpg", @ "image/gif", @ "image/png", @ "image/ico" , @ "छवि/एक्स-आइकन", @ "छवि/बीएमपी", @ "छवि/एक्स-बीएमपी", @ "छवि/एक्स-xbitmap", @ "छवि/एक्स-जीत-बिटमैप", शून्य]; ' AFURLResponseSerialization.m – Adnan

+0

में मुझे इसका उपयोग कैसे करना चाहिए? , मुझे लगता है कि एक ही समस्या है! [लिंक] (http://stackoverflow.com/questions/25766499/having-issue-with-getting-image-from-server) –

0

सभी कार्य है कि यूआई हेरफेर मुख्य थ्रेड पर किया जाना चाहिए। इसलिए आपको पूर्णता ब्लॉक में अपने टेबलव्यू डेटा को पुनः लोड करते समय 'performSelectorOnMainThread:' का उपयोग करने की आवश्यकता हो सकती है।

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO] 
+0

अच्छा सुझाव Jonkroll, हालांकि मेरे कारण की मदद नहीं की। –

+3

FWIW, सभी AFNetworking कॉलबैक ब्लॉक पहले से ही डिफ़ॉल्ट थ्रेड पर निष्पादित करते हैं। – mattt

0

मुझे एक ही समस्या थी लेकिन यह पता चला कि मैं एक यूआरएल पास कर रहा था जिसमें इसमें रिक्त स्थान थे। जब मैंने stringByAddingPercentEscapesUsingEncoding: का उपयोग कर यूआरएल को सही ढंग से एन्कोड किया तो छवियां अब लोड हो गईं।

2

आप स्वीकार करने के लिए क्या content-type आप इस लाइब्रेरी बस request इस तरह बदल रहा है के साथ चाहते हैं का प्रबंधन कर सकते हैं:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:yourURL]; 
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; 

और फोन AFNetworking विधि:

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
            } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
            }]; 

इस तरह आप में सक्षम हो जाएगा content-typeपर लाइब्रेरी को बदलकर ओवरराइड करें।

2

AFNetworking डिफ़ॉल्ट रूप से छवि/जेपीजी एमआईएम प्रकार का समर्थन नहीं करता है।

आप AFNetworking लाइब्रेरी

[AFImageRequestOperation addAcceptableContentType:@"image/jpg"]; 
संबंधित मुद्दे