Как отследить URLSessionTask после того, как Alamofire повторит запрос

Мы используем Alamofire 4 и хотим сопоставить URLSessionTasks с сущностями в базе данных.

Сначала мы использовали поле taskDescription из URLSessionTask, чтобы поместить туда UUID объекта базы данных, но потом выяснили, что Alamofire создает новую задачу при повторной попытке запроса, и это поле не копируется. taskIdentifier также меняется с каждой новой созданной задачей, и кажется, нет никакого способа отследить изменение taskIdentifier в Alamofire.

Существуют ли какие-либо другие методы сопоставления задач и сущностей в базе данных или файлах? Конечная цель — удалить файл + объект, если запрос на фоновую загрузку выполнен успешно. И это может произойти после завершения работы приложения, поэтому в настоящее время мы храним информацию в базе данных.


person uson1x    schedule 18.05.2018    source источник


Ответы (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, чтобы выставить базовое значение как фактическое нативное свойство.

person dgatwood    schedule 19.05.2018