1

画像識別子を受け入れ、AFNetworkingのAFImageRequestOperationを使用して画像をダウンロードする便利な関数を作成しようとしています。関数は画像を正しくダウンロードしますが、成功ブロックでUIImageを返すことができません。

-(UIImage *)downloadImage:(NSString*)imageIdentifier
{
  NSString* urlString = [NSString stringWithFormat:@"http://myserver.com/images/%@", imageIdentifier];

  AFImageRequestOperation* operation = [AFImageRequestOperation imageRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] imageProcessingBlock:nil
  success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
  {
    NSLog(@"response: %@", response);
    return image;                                                   
  }
  failure:nil];

[operation start];

}

このreturn image;行は私にエラーを与えます:

Incompatible block pointer types sending 'UIImage *(^)(NSURLRequest *__strong, NSHTTPURLResponse *__strong, UIImage *__strong)' to parameter of type 'void (^)(NSURLRequest *__strong, NSHTTPURLResponse *__strong, UIImage *__strong)' 

何が起こっているのかについてのアイデアはありますか?ただ電話できるようになりたい

UIImage* photo = [downloadImage:id_12345];

4

1 に答える 1

3

AFNetworking の画像ダウンロード操作は非同期であるため、操作開始時に割り当てることはできません。

構築しようとしている関数は、デリゲートまたはブロックのいずれかを使用する必要があります。

- (void)downloadImageWithCompletionBlock:(void (^)(UIImage *downloadedImage))completionBlock identifier:(NSString *)identifier {
  NSString* urlString = [NSString stringWithFormat:@"http://myserver.com/images/%@", identifier];

  AFImageRequestOperation* operation = [AFImageRequestOperation imageRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] imageProcessingBlock:nil
  success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
  {
    NSLog(@"response: %@", response);
    completionBlock(image);                                                   
  }
  failure:nil];

  [operation start];
}

このように呼びます

// start updating download progress UI
[serverInstance downloadImageWithCompletionBlock:^(UIImage *downloadedImage) {
  myImage = downloadedImage;
  // stop updating download progress UI
} identifier:@""];
于 2013-02-20T00:28:24.813 に答える