2012-02-27 3 views
7
나는 URL에서 이미지를로드 할 AFNetworking있는 UIImageView 호출을 사용하기 위해 노력하고있어

아래와 같이,AFNetworking + UIImageView에 자리 표시 자 이미지가 나타납니다,하지만 URL 이미지

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

자리 표시 자 이미지가 항상 표시되지만 "feed.imageURL"의 실제 이미지는 절대 사용하지 않습니다. URL이 실제로 올바른지 확인했습니다. 나는 심지어 그것을 하드 코딩하여, 여전히 아무것도 만들지 않았다.

내 기본 앱 설정은 탭 컨트롤러이고 viewDidLoad에서는 HTTP 요청으로 JSON 데이터를 수집하는 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 :'delegate 메소드에서'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의 경우 '자체'입니다[email protected] "image/jpeg", @ "image/jpg", @ "image/gif", @ "image/png", @ "image/ico"허용되는 컨텐츠 유형 = [[NSSet alloc] initWithObjects : , "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를 조작하는 모든 작업은 주 스레드에서 수행해야합니다 같은

내 요청 블록 보인다. 따라서 완료 블록에서 tableview 데이터를 다시로드 할 때 '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 TYPE을 지원하지 않습니다.

당신은 AFNetworking 도서관

[AFImageRequestOperation addAcceptableContentType:@"image/jpg"];