2012-02-27 29 views
7

Tôi đang cố gắng sử dụng các cuộc gọi AFNetworking UIImageView để tải hình ảnh từ một URL như hình dưới đây:AFNetworking + UIImageView hình ảnh giữ chỗ xuất hiện, nhưng không phải URL hình ảnh

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

Hình ảnh giữ chỗ luôn xuất hiện, nhưng hình ảnh thực tế từ "feed.imageURL" không bao giờ thực hiện. Tôi đã xác minh rằng URL thực sự chính xác. Tôi thậm chí còn mã hóa nó để chắc chắn, và vẫn không có gì.

Thiết lập ứng dụng cơ bản của tôi là bộ điều khiển tab ... và trong viewDidLoad, tôi gọi phương thức "fetchFeed" thực hiện yêu cầu HTTP để thu thập dữ liệu JSON của tôi.

khối Yêu cầu của tôi trông giống như:

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

Are hình ảnh của bạn trong vòng UITableViewCells? Bạn đang gọi 'setImageWithURL' trong phương thức' delegForRowAtIndexPath: 'delegate của bạn? – jonkroll

+0

Có, cho cả hai câu hỏi của bạn. –

+0

Bạn có thể bao gồm mã bạn sử dụng để đặt hình ảnh từ xa, trong 'tableView: cellForRowAtIndexPath:'? – mattt

Trả lời

9

Tắt máy chủ Tôi yêu cầu hình ảnh gửi content-type "image/jpg" và theo mặc định AFNetworking không hỗ trợ loại tệp này.

Tôi đã thay đổi phương pháp lớp trong AFImageRequestOperation để trông giống như:

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

và nó cố định vấn đề của tôi.

+2

Bạn đã thực hiện một ngày của tôi! Đối với AFNetworking 2.0 nó là 'self.AcceptContentTypes = [[NSSet alloc] initWithObjects: @ "hình ảnh/tiff", @ "hình ảnh/jpeg", @ "hình ảnh/jpg", @ "hình ảnh/gif", @ "hình ảnh/png", @ "hình ảnh/ico" , @ "hình ảnh/x-biểu tượng", @ "hình ảnh/bmp", @ "hình ảnh/x-bmp", @ "hình ảnh/x-xbitmap", @ "hình ảnh/x-win-bitmap", nil]; ' trong AFURLResponseSerialization.m – Adnan

+0

Tôi nên sử dụng điều này như thế nào? , Tôi nghĩ rằng có cùng một vấn đề! [LINK] (http://stackoverflow.com/questions/25766499/having-issue-with-getting-image-from-server) –

0

Tất cả các hoạt động mà điểu khiển UI phải được thực hiện trên các chủ đề chính. Vì vậy, bạn có thể cần phải sử dụng 'performSelectorOnMainThread:' khi tải lại dữ liệu tableview của bạn trong khối hoàn thành.

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

Đề xuất tốt Jonkroll, đã không giúp tôi. –

+3

FWIW, tất cả các khối gọi lại AFNetworking được thực hiện trên luồng chính theo mặc định. – mattt

0

Tôi gặp sự cố tương tự nhưng hóa ra tôi đã chuyển URL chứa khoảng trắng trong đó. Khi tôi mã hóa đúng URL bằng cách sử dụng stringByAddingPercentEscapesUsingEncoding: các hình ảnh hiện đang tải.

2

Bạn có thể quản lý để chấp nhận những gì content-type bạn muốn với thư viện này chỉ đơn giản là thay đổi request như thế này:

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

Và gọi phương thức AFNetworking:

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

Bằng cách này bạn sẽ có thể ghi đè số content-typemà không cần thay đổi thư viện.

2

AFNetworking không hỗ trợ image/jpg MIME TYPE theo mặc định.

Bạn có thể hỗ trợ nó mà không sửa đổi AFNetworking Thư viện

[AFImageRequestOperation addAcceptableContentType:@"image/jpg"]; 
Các vấn đề liên quan