2009-08-17 8 views
9

मैं आईफोन विकास के लिए बिल्कुल नया हूं और अपने आवेदन में 'सर्वर से छवियां' लाने की कोशिश कर रहा हूं।यूआरएल/सर्वर से छवि प्राप्त करना

मैं निम्न विधि का उपयोग कर रहा यह करने के लिए:

- (UIImage *)imageFromURLString:(NSString *)urlString 
{ 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [request setHTTPMethod:@"GET"]; 

    NSURLResponse *response = nil; 
    NSError *error = nil; 
    NSData *result = [NSURLConnection sendSynchronousRequest:request   
    returningResponse:&response error:&error]; 
    [request release]; 
    [self handleError:error]; 
    UIImage *resultImage = [UIImage imageWithData:(NSData *)result]; 

    NSLog(@"urlString: %@",urlString); 
    return resultImage; 
} 

इस समारोह की उम्मीद छवि वापस नहीं करता है, हालांकि मैं डिबगर कुछ मूल्य होता है छवि वस्तु के लिए NSData (बाइट्स में) में देख सकते हैं

हालांकि, सर्वर से पाठ प्राप्त करने के लिए एक बहुत ही समान कार्य करता है और मुझे अपेक्षित मूल्य मिलते हैं।

- (NSString *)jsonFromURLString:(NSString *)urlString 
{ 

    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [request setHTTPMethod:@"GET"]; 

    NSURLResponse *response = nil; 
    NSError *error = nil; 
    NSData *result = [NSURLConnection sendSynchronousRequest:request 
    returningResponse:&response error:&error]; 
    [request release]; 
    [self handleError:error]; 
    NSString *resultString = [[NSString alloc] initWithData:result 
    encoding:NSUTF8StringEncoding]; 

    return [resultString autorelease]; 
} 

यह विधि ठीक काम करती है।

क्या कोई मुझे समझने में मदद कर सकता है कि मुझे सर्वर से छवि क्यों नहीं मिल रही है?

धन्यवाद

उत्तर

1

सबसे संभावित कारण यह है कि आप वास्तव में एक छवि प्राप्त करते समय नहीं कर रहे हैं, या आप एक छवि कि iPhone डिकोड नहीं कर सकते हैं फ़ेच कर रहे हैं है। मैं परिणाम के एमआईएम प्रकार ([response MIMEType]) की जांच करके शुरू करूंगा और सुनिश्चित कर सकता हूं कि आप यही उम्मीद कर रहे हैं और वास्तव में उदाहरण के लिए एक स्ट्रिंग नहीं है। फिर सुनिश्चित करें कि आपका प्रकार UIImage प्रकारों में से एक है: टिफ़, जेपीईजी, जीआईएफ, पीएनजी, बीएमपी, आईसीओ, क्यू, एक्सबीएम।

1

यह बहुत अच्छी तरह से हो सकता है कि आपका सर्वर वापस लौट रहा है वास्तव में छवि डेटा नहीं है, और आप केवल यूआरएल को ब्राउज़र में पेस्ट कर सकते हैं और देख सकते हैं कि आपको छवि मिलती है या नहीं। त्रुटि-जांच की कमी को छोड़कर कोड के साथ कुछ भी गलत नहीं लगता है।

जब आप एक + छवि विथडाटा संदेश में एक गैर-छवि NSData पास करते हैं, तो आपको शून्य मिल जाएगी। आपको शायद इसकी जांच करनी चाहिए।

2

मैंने रिमोट इमेज क्लास को नेटवर्क पर छवियों को असीमित रूप से लोड करने के लिए लिखा है। यह आवश्यक होने पर स्मृति को मुक्त करने का भी ख्याल रखता है। यह पोस्ट देखें: http://www.dimzzy.com/blog/2009/11/remote-image-for-iphone/

29

यदि आप जो भी करने की कोशिश कर रहे हैं वह एक यूआरएल के माध्यम से वेब सर्वर से एक छवि ले लेता है तो एक आसान तरीका है।

यह मैं क्या उपयोग है:

UIImage* myImage = [UIImage imageWithData: 
    [NSData dataWithContentsOfURL: 
    [NSURL URLWithString: @"http://example.com/image.jpg"]]]; 

और आप एक छवि को देखने पर इसका इस्तेमाल करना चाहते हैं तो बस निम्न कार्य करें: क्यों एक व्यक्ति

// Let's assume the picture is an instantiated UIImageView 
[picture setImage: myImage]; 
[myImage release]; 

मुझे यकीन है कि वहाँ कारण हैं हूँ हो सकता है कि इस दृष्टिकोण का उपयोग न करें, लेकिन मैं इसके साथ शुरू करूंगा और देख सकता हूं कि यह वही करेगा जो आपको चाहिए।

+1

: दूसरे शब्दों में, आप की जाँच करनी चाहिए तरीकों पहले वापसी मूल्य, और केवल पहुँच त्रुटि सूचक अगर विधि असफल । – Domness

+0

आप मेरा इमेज क्यों जारी करते हैं? आपने इसे आवंटित नहीं किया है –

1

यह शायद आपके प्रश्न के लिए सीधे प्रासंगिक नहीं है, लेकिन मैं यह इंगित करना चाहता हूं कि आपकी त्रुटि जांच यहां एक संभावित समस्या है। इस तरह के तरीके जिनके पास NSError पर एक संदर्भ पैरामीटर है, वे आमतौर पर परिभाषित नहीं करते हैं कि वे सफलता पर क्या लौटते हैं। जब तक आप यह एक अलग थ्रेड में डाल तो यूआई बंद नहीं करता है

NSString *resultString = nil; 
NSData *result = [NSURLConnection sendSynchronousRequest:request 
             returningResponse:&response 
                error:&error]; 
[request release]; 

if(result) { 
    resultString = [[NSString alloc] initWithData:result 
             encoding:NSUTF8StringEncoding]; 
} 
else { 
    [self handleError:error]; 
} 

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

  • कोई संबंधित समस्या नहीं^_^