【发布时间】:2018-01-11 22:50:01
【问题描述】:
我正在从我的应用程序中的 CDN 异步下载图像(在 UICollectionView 中)。每次我运行它,不同的图像将无法加载。大约 22 个中的 1-3 个。有时(很少)它们都加载。但关键是它并不一致。发生了什么是在这一行:
NSData *fileData = [NSData dataWithContentsOfURL:location];
fileData 是间歇性的 nil 。奇怪的是,NSURLSessionDownloadTask 中的error 也是nil。这是完整的方法:
+ (void) downloadFileAsynchronouslyWithUrl:(NSURL *)fileUrl andCallback:(void (^)(NSData* fileData, NSError* error))callback {
NSURLSessionDownloadTask *downloadTask = [[NSURLSession sharedSession] downloadTaskWithURL:fileUrl completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error != nil) {
NSLog(@"ERROR: %@", error.localizedDescription);
callback(nil, error);
}
else {
NSData *fileData = [NSData dataWithContentsOfURL:location];
if (fileData != nil) {
callback(fileData, nil);
}
else {
// Getting this intermittently
NSError *err = [self errorFromString:@"downloaded file was nil!"];
callback(nil, err);
}
}
});
}];
[downloadTask resume];
}
我已经记录了状态码,它总是 200。
这让我很困惑。有什么想法吗?
【问题讨论】:
-
在加载图像时是否在滚动?如果使用可重复使用的单元格,图像可能会加载到错误的单元格中。
-
@PeterTao 图像位于正确的单元格中 - 我已经将问题追溯到这种方法,就像我说的那样,
fileData导致 nil -
在使用第三方库(如github.com/rs/SDWebImage)时是否会出现这种情况?如果请求是通过 Postman 发出的,那么检索到的图像是否一致?
-
@PeterTao 不,不使用任何第三方库。
-
我在想可能是一次请求太多,而 iOS 无法同时处理那么多...也许我需要限制它们?
标签: ios objective-c asynchronous