使用 Afnetworking 获取 UIImageView 并将其放入数组中

Posted

技术标签:

【中文标题】使用 Afnetworking 获取 UIImageView 并将其放入数组中【英文标题】:Get UIImageView using Afnetworking and put it in an array 【发布时间】:2012-04-24 01:59:22 【问题描述】:

正如标题所说,我需要获取图像并将其放入数组中。

UIImageView *myImage = [[UIImageView alloc] init];
[myImage setImageWithURL:[NSURL URLWithString:@"http://host.com/images/1/1.png"] placeholderImage:[UIImage imageNamed:@"page3.png"]];
[items addObject:myImage]; 

问题在于,在加载图像时,代码继续执行,没有任何东西放入数组中,实际上我猜是插入了一个空的 UIImageView。

我该如何解决这个问题?

附带说明,我使用 iCarousel 来显示图像,在数据源中它获取图像数组并显示它们。我可以以某种方式修改 iCarousel 吗?

提前致谢。

【问题讨论】:

如果您还没有实现 AFNetworking 委托,您可能应该考虑进行异步调用。 好吧,如果这段代码在主线程上运行,那么应用程序将等待它下载每个图像(使 UI 停止响应输入)使用回调意味着应用程序可以下载图像后台,而用户可以继续使用该应用程序。 这就是我需要的,用户可以继续使用该应用程序,但是一旦图像下载,我需要调用以重新加载数据。可以通知我什么时候完成吗?我看到了 setImageWithURL:placeholderImage:success:failure: 但我对 ios 还很陌生,不知道如何处理块。欢迎任何代码 对不起,我的错误 AFNetworking 向 UIImageView 添加了一个类别,这意味着 setImageWithURL 已经在后台异步加载。在这种情况下,图像不会在单步执行代码后立即设置,并且需要一段时间才能下载。 【参考方案1】:

您可以使用 setImageWithURLRequest 方法发送成功消息或在完成后执行 UI 更新,例如使用以下方法:

- (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;

这是一个例子(未测试)

[image setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"host.com/images/1/1.png"]] placeholderImage:[UIImage imageNamed:@"page3.png"] 
                   success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
                             //reload data here
                   
                   failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
                             //handle errors here
                   

【讨论】:

这就是我尝试过的,但我得到了这个错误语义问题:不兼容的块指针类型将'void(^)(void)'发送到'void(^)类型的参数(NSURLRequest *__strong,NSHTTPURLResponse * __strong, UIImage *__strong)' 我想我应该如何将它传递给块? 得到它的工作,感谢您抽出时间来帮助我。干杯 [图像 setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"host.com/images/1/1.png"]]placeholderImage:[UIImage imageNamed:@"page3.png"] 成功:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) //在这里重新加载数据 failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) //在这里处理错误 答案中的代码将在运行时崩溃此方法将 NSURLRequest 作为参数

以上是关于使用 Afnetworking 获取 UIImageView 并将其放入数组中的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 使用 AFNetworking 获取图像保持缓存

使用 Afnetworking 获取 UIImageView 并将其放入数组中

使用 AFNetworking 异步下载图像后,是不是可以从 UIImageView 获取图像

使用 AFNetworking 从 S3 获取公共文件并接收 403

AFNetworking:从 Http 响应中获取 JSON 值

使用 AFNetworking ios xcode 获取 gmail 邮件列表