Alamofire重试请求后如何跟踪URLSessionTask

How to track URLSessionTask after Alamofire retries the request

我们正在使用 Alamofire 4 并希望将 URLSessionTask 与数据库中的实体相匹配。

我们首先使用 URLSessionTasktaskDescription 字段将数据库实体的 UUID 放在那里,但后来发现 Alamofire 在请求重试时创建了一个新任务,并且该字段没有被复制过来. taskIdentifier 也会随着每个新任务的创建而变化,而且似乎没有办法在 Alamofire 中跟踪 taskIdentifier 的变化。

是否有任何其他技术可以匹配数据库或文件中的任务和实体?如果后台上传请求成功,最终目标是删除文件和实体。这可能会在应用程序终止后发生,因此我们目前将信息存储在数据库中。

假设 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。

一旦你这样做了,只要复制请求,就应该复制 属性,就像请求中的任何 first-class 属性 一样。您甚至可以考虑在 NSURLRequest 上创建一个类别,以将基础值公开为实际原生 属性.