<分区>
标签 ios afnetworking
<分区>
我使用 AFNetworking
库将打包文件发送到服务器。每个数据包均使用单独的 NSURLSessionUploadTask
发送使用 AFURLSessionManager#uploadTaskWithRequest:fromData:progress:completionHandler
创建.数据包的数量从 1 到数百不等。数据包按顺序发送,只有前一个数据包成功后,下一个数据包才会发送。
它在大多数情况下工作得很好,但最近用户(大约 1%)开始报告发送数据包有时会卡住。以下是我在他们的日志中发现的内容:
Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://url.to.service/service?params=XYZ, NSErrorFailingURLKey=***, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalUploadTask <72F2E4D0-4505-4D9D-85A5-08E0DF152EE9>.<354>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <72F2E4D0-4505-4D9D-85A5-08E0DF152EE9>.<354>, NSLocalizedDescription=cancelled}
应用程序重试多次,但重新创建新的 NSURLSessionUploadTask
并再次尝试,但总是失败并出现完全相同的错误。
代码如下(为了便于阅读,我对其进行了简化):
@implementation PacketDataManagementService : AFHTTPSessionManager
- (void)uploadPacketData:(NSData *)packetData
{
NSURLRequest *request = [self createRequest];
__block NSURLSessionDataTask *task = [self uploadTaskWithRequest:request fromData:packetData progress:nil completionHandler:^(NSURLResponse *__unused response, id responseObject, NSError *error) {
if ( error )
{
//log error
}
else
{
//notification to invoke `uploadPacketData` for the next packet
}
}];
//adding this line was the only way to "reproduce" the issue my users have - exactly the same error is being logged
//[task cancel];
[task resume];
}
@end
我尝试重现它但没有成功 - 这是我迄今为止尝试过的:
AFHTTPSessionManager
( PacketDataManagementService
扩展了它)在请求之间保留并存储在用于发出所有这些请求的单例中。在过去的几天里,我的头碰壁了,我不知道我还能在哪里看 - 我将不胜感激任何建议。
最佳答案
我已经找到了导致问题的原因 - AFURLSessionManager#uploadTaskWithRequest:fromData:progress:completionHandler
中的 fromData:
参数不能为 nil - 当 时任务会立即取消>数据
丢失。当我尝试发送的文件之前被删除时,该问题暴露了应用程序另一部分的错误。
显然,一旦我弄清楚问题是什么,我就发现了 a similar issue reported on StackOverflow并给出解决方案。
Apple 没有在 API 文档中提及此行为,这太疯狂了。
关于ios - NSURLSessionUploadTask 创建后立即取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413471/
相关文章:
ios - 将 NSArray 作为 AFNetworking 中的参数传递
php - 将此 .php 转换为 ObjC 可运行的 NSURLSession POST 请求?
ios - 显示 AFNetworking+UIImageView 占位符图像,但不显示 URL 图像
ios - 如何最好地构建代码以在 iOS 中使用 AFNetworking 和 CoreData 下载资源
ios - 使用 afnetworking 2.1.0 实现 "Upload Task for a Multi-Part Request"时出错
ios - 如何在 iOS 上使用 AFNetworking/NSURLConnection 关注 "queue"