Alamofire重试请求后如何跟踪URLSessionTask
How to track URLSessionTask after Alamofire retries the request
我们正在使用 Alamofire 4 并希望将 URLSessionTask
与数据库中的实体相匹配。
我们首先使用 URLSessionTask
的 taskDescription
字段将数据库实体的 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
上创建一个类别,以将基础值公开为实际原生 属性.
我们正在使用 Alamofire 4 并希望将 URLSessionTask
与数据库中的实体相匹配。
我们首先使用 URLSessionTask
的 taskDescription
字段将数据库实体的 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
上创建一个类别,以将基础值公开为实际原生 属性.