17

AFNetworkingを使用してUIImageView+AFNetworking.h、オンライン画像をに非同期でロードしていますUIImageView

を使用するとリモートイメージは非常によく読み込まれますが、リモートイメージsetImageWithURLRequest:を使用しようとするsetImageWithURLRequest:placeholderImage:success:failureとダウンロードされますが、UIImageViewはそれをUIImageとして設定しません。

これが私のコードです:

@property (strong) IBOutlet UIImageView *imageView;

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    [_imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://i.imgur.com/fVhhR.png"]]
                       placeholderImage:nil
                                success:^(NSURLRequest *request , NSHTTPURLResponse *response , UIImage *image ){
                                    NSLog(@"Loaded successfully: %d", [response statusCode]);
                                }
                                failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
                                    NSLog(@"failed loading: %@", error);
                                }
     ];
}

画像は常に正常に読み込まれ、ステータスコードは常に200です。ただし、画像を設定する[_imageView setImage:image];には、successブロックに追加する必要があります。UIImageView

iOS6.0を使用しています

何か案は?

4

5 に答える 5

30

成功ブロックを指定する場合は、UIImageViewの画像プロパティを設定する必要があります。nil成功ブロックを指定すると、AFNetworkingがそれを行います。

これはUIImageView+AFNetworking.m(117行目)の関連セクションです。

if (success) {
    success(operation.request, operation.response, responseObject);
} else {
    self.image = responseObject;
}

-setImageWithURL:placeholderImage:または、完了ブロックなしで使用します。

于 2012-11-12T16:42:22.420 に答える
2

私も同じ問題を抱えていて、ライブラリのドキュメントに不満を感じた後、ロビンが上で述べたことを見つけました。だから今私は使用しています:

[imageView setImageWithURLRequest:imageRequest placeholderImage:nil success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSLog(@"Unable to retrieve image");
}];

チャームのように機能します。これがお役に立てば幸いです。

于 2013-07-16T18:28:16.773 に答える
2

ドキュメントは非常に明確です:

成功ブロックが指定された場合、戻る前に画像ビューの画像を設定するのはブロックの責任です。成功ブロックが指定されていない場合、画像を設定するデフォルトの動作 self.image = imageが適用されます。

したがって、成功のためにnilブロックを渡すか(上記のように)、ブロックを指定する場合は自分でsetImage:imageを呼び出すことができます

于 2014-04-08T06:52:32.887 に答える
1

あなたの成功ブロックでは、あなたはあなたにを与える必要がありUIImaage *imageますUIImageView。私はあなたが得ていると仮定しますNSLog(@"Loaded successfully: %d", [response statusCode]);

また、プレースホルダー画像はnilです。そこに画像を読み込んでいるようなプレースホルダーが必要ではありませんか?

于 2012-11-12T16:23:29.320 に答える
1

この問題に遭遇し、Webを閲覧および検索しているときにここにアクセスした場合は、別の理由があります。画像のファイル拡張子が間違っている可能性があります。たとえば、画像をjpgとして保存しても、誰かがファイル拡張子をpngに変更することにしました。

これを確認する方法は次のとおりです。まず、ネットワーク監視ツール(Charlieなど)を使用して、画像リクエストの「Content-Type」HTTPヘッダーを確認する必要があります。値が「image/png」であるとします。これは、バックエンドの画像のファイル拡張子がpngであることを意味します。次に、シミュレーターでアプリを実行してから、アプリのシミュレーターフォルダーに移動します。

/ Users / you / Library / Application Support / iPhone Simulator / select-folder-with-your-iOS-version / Applications / YourApp / Library / Caches / yourAppBundleId / fsCachedData /

画像ファイルを見つけて、このファイルにpngまたはjpg拡張子を追加します(AFNetworkingはファイル拡張子なしで画像ファイルをキャッシュするため、プレビューで開くには画像ファイルを追加する必要があります)。プレビューで開き、[ツール]/[インスペクターの表示]を押します。開いたパネルで「ドキュメントタイプ」を確認します。「PNG画像」(JPEG画像など)と異なる場合は、それが原因であり、バックエンドで画像自体を修正する必要があります。適切な画像編集プログラムで画像を開き、PNGとして保存します。

于 2014-06-30T10:44:59.053 に答える