【问题标题】:How to track URLSessionTask after Alamofire retries the requestAlamofire重试请求后如何跟踪URLSessionTask
【发布时间】:2018-10-28 19:39:06
【问题描述】:
我们正在使用 Alamofire 4 并希望将 URLSessionTasks 与数据库中的实体进行匹配。
我们首先使用URLSessionTask 的taskDescription 字段将数据库实体的UUID 放在那里,但后来发现Alamofire 在请求重试时创建了一个新任务,并且该字段没有被复制。 taskIdentifier 也会随着每个新任务的创建而变化,而且似乎没有办法在 Alamofire 中跟踪 taskIdentifier 的变化。
是否有任何其他技术可以匹配数据库或文件中的任务和实体?如果后台上传请求成功,最终目标是删除文件+实体。这可能会在应用程序终止后发生,因此我们目前将信息存储在数据库中。
【问题讨论】:
标签:
alamofire
nsurlsession
nsurlsessiondatatask
nsurlsessionuploadtask
【解决方案1】:
假设 AlamoFire 没有做一些疯狂的事情,你应该能够做这样的事情:
NSString *const identifierProperty = @"com.you.yourProduct.requestID";
NSString *myIdentifier = [NSUUID UUID].UUIDString;
[NSURLProtocol setProperty:myIdentifier
inKey:identifierProperty
inRequest:theURLRequest];
然后,稍后,将其取回:
NSString *requestID = [NSURLProtocol propertyForKey:identifierProperty
inRequest:theURLRequest];
为 Objective-C 道歉,但它应该可以轻松转换为 Swift。
完成此操作后,无论何时复制请求,都应复制该属性,就像请求中的任何一等属性一样。您甚至可以考虑在 NSURLRequest 上创建一个类别,以将基础值公开为实际的原生属性。