Пользовательский SessionManager в Alamofire 4.7 отменяется немедленно - PullRequest
0 голосов
/ 26 мая 2018

Привет. Я пытаюсь создать пользовательский SessionManager в Alamofire, чтобы изменить значение timeoutIntervalForRequest по умолчанию.Я использую код ниже:

  let configuration=URLSessionConfiguration.default
  configuration.timeoutIntervalForRequest=20
  let sessionManager=Alamofire.SessionManager(configuration:configuration)

  sessionManager.request("my url", method: .post, parameters: params, encoding: JSONEncoding.default, headers: header)
        .responseJSON(completionHandler: { (response) in
                  if response.result.isSuccess{
                     //here goes the rest of my code
                   }
            }
               else{
                    //here goes the connection error part
                   }
            })

Проблема в том, что я всегда получаю часть ошибки, и когда я печатаю ответ в части ошибки, это выглядит так:

завершено с ошибкой - код: -999

СБОЙ: Ошибка Домен = NSURLErrorDomain Код = -999 "отменен"

, как будто мой запрос немедленно отменяется.Если я изменю sessionManager на Alamofire, который является менеджером по умолчанию, он работает нормально, но мне нужно изменить значение timeoutIntervalForRequest.Я использую Xcode 9.3 и swift 4 и Alamofire 4.7.2.Есть предложения?

1 Ответ

0 голосов
/ 03 января 2019

Я нашел решение в Проблемы с хранилищем Alamofire

jshier прокомментировано 10 октября 2016 г.

Неожиданная ошибка -999почти всегда означает, что ваш SessionManager был освобожден, отменяя все текущие запросы.Я предлагаю вам создать одноэлементное значение для вашего пользовательского SessionManager или, возможно, просто переоценить, если оно вам действительно нужно.

, если вы создаете одноэлементное значение для своего объекта, оно остается в памяти и предотвращает освобождение

и еще одна вещь, которую я избегаю - это именовать ваши переменные различными, sessionManager находится в Alamofire, а ваша переменная также называется sessionManager.

Alamofire 4.7, Swift 4

import Alamofire

public static let sharedManager: SessionManager = {
    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest=20
    let manager = Alamofire.SessionManager(configuration: configuration, delegate: SessionManager.default.delegate)
    return manager
}()

Alamofire 5.0.0-beta.6, Siwft 5.1

import Alamofire

static let APIManager: Session = {
    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest = 20
    let delegate = Session.default.delegate
    let manager = Session.init(configuration: configuration,
                               delegate: delegate,
                               startRequestsImmediately: true,
                               cachedResponseHandler: nil)
    return manager
}()
...