AFNetworing – setImageWithURLRequest无效
我想在我的一个应用程序中设置tableview单元格图像。 我使用AFNetworking (1.2.1)
,我用setImageWithURLRequest
来做。
我在其中设置图像的代码如下所示:
if (user.avatar) { NSString *imageUrl = user.avatar.url; [cell.profileImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { [cell setNeedsLayout]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"Error: %@", error); }]; }
我的错误日志返回这个:
Error: Error Domain=NSURLErrorDomain Code=-999 "The operation couldn't be completed. (NSURLErrorDomain error -999.)" UserInfo=0x1f5b56a0 {NSErrorFailingURLKey=https://d2rfichhc2fb9n.cloudfront.net/image/5/Cf7T_BA6- NFGL5ah0w4hdvmk_Vp7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvZTIvM2MvMjA vZTIzYzIwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0}
图像不会被设置。 在我更新到AFNetworking (1.2.1)
之前,我没有这个问题。 有任何想法吗?
更新
试图从url中删除这样的空白:
NSString *imageUrl = [user.avatar.url stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
但是我得到同样的错误。 如果API有时候会包含一个包含空格的图像文件名,这可能会很危险。
我看到三个问题:
-
-999意味着
NSURLErrorCancelled
,所以它看起来像URLRequest
被取消以某种方式。 你的代码在哪里?cell
对象或UIImageView
profileImage
是否可能过早释放? -
如果您正在定义成功块,AFNetworking的更新版本要求您自己设置图像。
-
确保url有效。
试试这个(当放在tableView:cellForRowAtIndexPath:
):
__weak UITableViewCell *weakCell = cell; [cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { if (weakCell) { weakCell.imageView.image = image; [weakCell setNeedsLayout]; } } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"Error: %@", error); }];
你的url似乎有一些额外的空间
您的url是https://d2rfichhc2fb9n.cloudfront.net/image/5/Cf7T_BA6- NFGL5ah0w4hdvmk_Vp7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvZTIvM2MvMjA vZTIzYzIwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0
没有空间的url
由于额外的空间,图像的URL是无效的,并没有得到。
编辑
NSString *strCorrectUrl = [user.avatar.url stringByReplacingOccurrencesOfString:@" " withString:@""];