9

私はiPhone開発にかなり慣れていないので、アプリケーションで「サーバーから画像」を取得しようとしています。

これを行うには、次の方法を使用しています。

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

Image オブジェクトの 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];
}

この方法はうまくいきます。

サーバーから画像を取得できない理由を誰かが理解するのを手伝ってくれますか?

ありがとう

4

5 に答える 5

28

URL を介して Web サーバーから画像を取得するだけの場合は、もっと簡単な方法があります。

これは私が使用するものです:

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

人がこのアプローチを使用したくない理由があると確信していますが、私はこれから始めて、必要なことを行うかどうかを確認します.

于 2009-11-05T23:25:10.317 に答える
2

ネットワークを介して非同期で画像を読み込むためのRemoteImageクラスを作成しました。また、必要に応じてメモリを解放します。この投稿を参照してください:http ://www.dimzzy.com/blog/2009/11/remote-image-for-iphone/

于 2009-11-05T14:16:45.350 に答える
1

最も可能性の高い原因は、実際に画像を取得していないか、iPhone がデコードできない画像を取得していることです。結果の MIME タイプ ( [response MIMEType]) をチェックすることから始めて、それが期待どおりのものであり、たとえば実際には文字列ではないことを確認します。次に、タイプがUIImageで処理できるタイプ (tiff、jpeg、gif、png、bmp、ico、cur、xbm) のいずれかであることを確認します。

于 2009-08-17T04:18:18.310 に答える
1

サーバーが返すのは実際には画像データではない可能性が非常に高く、URL をブラウザに貼り付けて、画像を取得できるかどうかを確認できます。エラーチェックがないことを除けば、コードに問題はないようです。

画像以外の NSData を +imageWithData メッセージに渡すと、nil が返されます。おそらくそれを確認する必要があります。

于 2009-08-17T04:20:54.313 に答える