2012-02-27 9 views
7

私は、以下のようにURLからイメージをロードするためにAFNetworking UIImageViewコールを使用しようとしている:プレースホルダイメージが常に現れるAFNetworking + UIImageViewプレースホルダ画像が現れますが、URLではない画像

[self.image setImageWithURL:[NSURL URLWithString:feed.imageURL] placeholderImage:  [UIImage imageNamed:@"logo"]]; 

が、 "feed.imageURL"からの実際のイメージは決してしません。 URLが実際に正しいことを確認しました。私はそれを確かめるためにハードコーディングしましたが、まだ何もありません。

私の基本的なアプリケーション設定はタブコントローラです...そしてviewDidLoadでは、私はJSONデータを収集するためにHTTPリクエストを実行するメソッド "fetchFeed"を呼び出します。

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
             [self parseDictionary:JSON]; 
             isLoading = NO; 
             [self.tableView reloadData]; 

             } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
              NSLog(@"Error: %@", error); 
              [self showNetworkError]; 
              isLoading = NO; 
              [self.tableView reloadData]; 
             }]; 
operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 
[queue addOperation:operation]; 
+0

を変更することなく、それをサポートすることができますUITableViewCells内のあなたのイメージはありますか?あなたの 'cellForRowAtIndexPath:'デリゲートメソッドで 'setImageWithURL'を呼び出していますか? – jonkroll

+0

はい、両方の質問に。 –

+0

'tableView:cellForRowAtIndexPath:'にリモートイメージを設定するコードを含めることができますか? – mattt

答えて

9

は、私は、このファイルの種類をサポートしていないcontent-type "image/jpg"を送っていたから、デフォルトAFNetworkingで画像を要求したサーバーをオンにします。

私が見えるようにAFImageRequestOperationでクラスメソッドを変更:

+ (NSSet *)defaultAcceptableContentTypes { 
return [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", @"image/jpg", nil]; 
} 

、それは私の問題を修正しました。

+2

あなたは私の一日を作った! AFNetworking 2.0のために、それは '自己です。イメージ/ jpeg、@ "イメージ/ jpg"、@ "イメージ/ gif"、@ "イメージ/ png"、@ "イメージ/ ico" @ image/x-bmp "、@" image/x-bmp "、@" image/x-xbitmap "、@" image/x-win-bitmap "、nil]; AFURLResponseSerialization.m – Adnan

+0

これはどのように使用しますか? 、私は同じ問題があると思います! [リンク](http://stackoverflow.com/questions/25766499/having-issue-with-getting-image-from-server) –

0

UIを操作するすべての操作は、メインスレッドで実行する必要がありますように

私の要求ブロックが見えます。したがって、完了ブロックでテーブルビューデータを再ロードするときには、 'performSelectorOnMainThread:'を使用する必要があります。

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO] 
+0

良い提案Jonkroll、私の原因を助けなかった。 –

+3

FWIW、すべてのAFNetworkingコールバックブロックは既定でメインスレッドで既に実行されています。 – mattt

0

私は同様の問題がありましたが、スペースが含まれているURLを渡していたことが判明しました。 stringByAddingPercentEscapesUsingEncoding:を使用してURLを正しくエンコードすると、画像が読み込まれるようになりました。

2

あなたはこのライブラリは、単にこのようなrequest変更して欲しいものcontent-type受け入れるように管理することができます。AFNetworking方法

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:yourURL]; 
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; 

を、コール:

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
            } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
            }]; 

次のことができるようになります。この道をライブラリを変更せずにcontent-typeを無効にします。

2

AFNetworkingは、デフォルトではイメージ/ jpg MIMEタイプをサポートしていません。

あなたはAFNetworkingライブラリ

[AFImageRequestOperation addAcceptableContentType:@"image/jpg"]; 
関連する問題