2009-08-17 12 views
9

저는 iPhone 개발에 상당히 익숙하며 응용 프로그램에서 'Images from Server'를 가져 오려고합니다. 나는이 작업을 수행하기 위해 다음과 같은 방법을 사용하고URL/서버에서 이미지 가져 오기

: 나는 이미지 오브젝트있는 NSData가 (바이트) 어떤 값을 가지고 디버거에서 볼 수 있지만

- (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; 
} 

이 기능은 예상 이미지를 반환하지 않습니다

서버에서 텍스트를 가져 오는 기능과 매우 유사하지만 예상되는 값을 얻을 수 있습니다.

- (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

원인은 당신이 실제로 이미지를 가져 오는하지 않는, 또는 당신이 아이폰을 디코딩 할 수있는 이미지를 가져 오는한다는 것이다. 먼저 결과의 MIME 유형 ([response MIMEType])을 확인하여 기대하고있는 것이고 실제로는 문자열이 아닌지 확인하십시오. 그런 다음 유형이 UIImage이 처리 할 수있는 유형 중 하나인지 확인하십시오. tiff, jpeg, gif, png, bmp, ico, cur, xbm.

1

서버가 반환하는 이미지 데이터가 실제로 이미지 데이터가 아니므로 브라우저에 URL을 붙여넣고 이미지가 있는지 확인할 수 있습니다. 오류 검사가 없다는 점을 제외하면 코드에 아무런 문제가없는 것처럼 보입니다.

이미지가 아닌 NSData를 + imageWithData 메시지에 전달하면 nil이 발생합니다. 아마 그걸 확인해야합니다.

29

URL을 통해 웹 서버에서 이미지를 가져 오는 것보다 쉬운 방법이 있습니다.

내가 무엇을 사용 :

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

을만큼 UI가 고정되지 않도록 별도의 스레드를 넣어 . – Domness

+0

왜 myImage를 출시합니까? 너는 그것을 할당하지 않았다. –

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]; 
}