Как отслеживать URLSessionTask после того, как Alamofire повторяет запрос - PullRequest
0 голосов
/ 18 мая 2018

Мы используем Alamofire 4 и хотим сопоставить URLSessionTask s с объектами в базе данных.

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

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

1 Ответ

0 голосов
/ 19 мая 2018

Предполагая, что 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, чтобы представить базовое значение как фактическое собственное свойство.

...