2009-08-17 17 views
9

iPhone geliştirmeye ve uygulamasındaki 'Sunucudan Görüntüler' getirmeye çalışırken oldukça yeniyim. Bunu yapmak için aşağıdaki yöntemi kullanıyorumResim URL/sunucudan alınma

: Ben Görüntü nesnesi için NSData (bayt) bazı değere sahiptir ayıklayıcısında görebilirsiniz rağmen

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

Bu fonksiyon beklenen görüntüyü döndürmez

Sunucudan metin almak için çok benzer bir işlev olsa da ve beklenen değerleri aldım.

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

Bu yöntem düzgün çalışıyor.

Birisi, neden görüntüyü sunucudan alamadığımı anlamamda bana yardımcı olabilir mi?

Teşekkür

cevap

1

en olası nedeni, aslında bir resmi getirilirken etmiyorsunuzdur veya iPhone deşifre edemez bir görüntü alma olmasıdır. Sonucun MIME türünü kontrol ederek başlayacağım ([response MIMEType]) ve aslında beklediğiniz şeyin olduğundan emin olmalısınız. Ardından türünüzün UIImage türlerinden biri olduğundan emin olun: tiff, jpeg, gif, png, bmp, ico, cur, xbm.

1

Sunucunuzun döndürdüğü şey gerçekte görüntü verileri değildir ve URL'yi bir tarayıcıya yapıştırabilir ve görüntüyü alıp alamayacağınızı görebilirsiniz. Hata denetimi yetersizliği dışında kodda yanlış bir şey yok gibi görünüyor.

Görüntü olmayan bir NSData'yı bir + imageWithData mesajına geçirdiğinizde, nil olacaktır. Muhtemelen kontrol etmelisin.

29

Yapmaya çalıştığınız tek şey bir web sunucusundan URL aracılığıyla bir görüntü yakalamanız daha kolay bir yoldur.

Bu

kullandığım budur:

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

Ve bir resim görünümü kullanmak istiyorsanız aşağıdakileri yapmanız yeterlidir: Ben nedenleri vardır eminim neden bir kişi

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

Bu yaklaşımı kullanmak istemeyebilir, ancak bununla başlayıp, ihtiyacınız olanı yapıp yapmayacağını görmek isterim.

+1

sürece UI kilitlemek almaması için ayrı bir iş parçacığı dediği gibi . – Domness

+0

Neden myImage'ı serbest bırakıyorsunuz? Sen tahsis etmedin –

1

Muhtemelen sorununla doğrudan alakalı değildir, ancak hata kontrolünüzün olası bir sorunu olduğunu belirtmek isterim. Bunun gibi bir NSError referans parametresine sahip olan yöntemler genellikle başarıda ne döndüklerini tanımlamaz. yöntem başarısız olursa başka deyişle, hata işaretçi yöntemleri ilk değer döndürmek kontrol edip sadece erişim olmalıdır:

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]; 
} 
İlgili konular