【问题标题】:Issue with setImageWithURL AFNetworking success handlersetImageWithURL AFNetworking 成功处理程序的问题
【发布时间】:2012-10-18 20:22:25
【问题描述】:

在我的UIImage 对象上调用setImageWithURLRequest: 时,似乎没有调用成功或失败处理程序。 SetImageWithURL 也没有设置我的图像。如果我使用 setImageWithURL: placeholder: 占位符已设置,但 url 中的图像永远不会设置。

请原谅我没有尽快发布代码。我尝试使用两种方法(使用AFNetworking)来异步设置我的图像视图:

[_imageView setImageWithURL:[NSURL URLWithString:@"path/to/file"]];

[_imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/path/to/image.jpg"]] placeholderImage:[UIImage imageNamed:@"your_image_here.jpg"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
NSLog(@"Your image request succeeded!");
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"Your image request failed...");
}];

我尝试在viewDidLoad 中触发这些,但图像视图永远不会加载。

查看setImageWithURLRequest: 的实际函数声明后,我调用它时似乎没有执行成功或失败块。我在代码中添加了NSLogs,让你们了解发生了什么:

- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest 
      placeholderImage:(UIImage *)placeholderImage 
               success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
               failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
{
NSLog(@"Log shows");

[self cancelImageRequestOperation];

NSLog(@"Log shows");
UIImage *cachedImage = [[[self class] af_sharedImageCache] cachedImageForRequest:urlRequest];

NSLog(@"Log shows");

if (cachedImage) {
NSLog(@"Log does not show");

self.image = cachedImage;
self.af_imageRequestOperation = nil;

if (success) {
    success(nil, nil, cachedImage);
    NSLog(@"Log does not show");

}
} else {
NSLog(@"Log shows");

self.image = placeholderImage;

AFImageRequestOperation *requestOperation = [[AFImageRequestOperation alloc] initWithRequest:urlRequest];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    if ([[urlRequest URL] isEqual:[[self.af_imageRequestOperation request] URL]]) {
        self.image = responseObject;
        self.af_imageRequestOperation = nil;
        NSLog(@"Log does not show");
    }

    if (success) {
        success(operation.request, operation.response, responseObject);
        NSLog(@"Log does not show");
    }

    [[[self class] af_sharedImageCache] cacheImage:responseObject forRequest:urlRequest];


} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    if ([[urlRequest URL] isEqual:[[self.af_imageRequestOperation request] URL]]) {
        self.af_imageRequestOperation = nil;
        NSLog(@"Log does not show");
    }

    if (failure) {
        failure(operation.request, operation.response, error);
        NSLog(@"Log does not show");
    }

}];

self.af_imageRequestOperation = requestOperation;

[[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation];

【问题讨论】:

  • 你能贴出你用来设置图像视图的代码吗?发布示例 URL 也无妨。
  • 请在故障块中打印错误,而不是"NSLog(@"Log does not show");" .然后你会准确地找到问题。

标签: ios ios4 uiimageview nsoperation afnetworking


【解决方案1】:

setImageWithURL: 是 UIImageView 类别,不能用于设置仅用于 UIImageView 的UIImage

[imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeHolderImage"]];

这是文档:http://engineering.gowalla.com/AFNetworking/Categories/UIImageView(AFNetworking).html

【讨论】:

  • 我其实是用它来设置一个imageView的。我的错。
  • 也许是一个愚蠢的问题,但我无法看到您的其余代码:您是否将 UIImageView 作为子视图添加到您的主视图控制器?
【解决方案2】:

感谢大家的帮助,但就像这里的每个人都注意到的那样,我的代码没有问题。这个问题实际上与ARC有关。我在我的 AFNetworking 文件中关闭了它。开机后,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多