如何在Alamofire重试请求后跟踪URLSessionTask

时间:2018-05-18 11:09:37

标签: alamofire nsurlsession nsurlsessiondatatask nsurlsessionuploadtask

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

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

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

1 个答案:

答案 0 :(得分: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上创建一个类别,以将基础值公开为实际的本机属性。