[ad_1]
I am attempting to cancel present job if the web page willDissappear with utilizing Alamofire . I’ve a AlamofireManager class that manages some configurations is :
class AlamofireManager : Alamofire.SessionManager{
static public let supervisor = AlamofireManager.generateManager()
class func generateManager() -> AlamofireManager{
let configuration = URLSessionConfiguration.default
let defaultHeaders = Alamofire.SessionManager.defaultHTTPHeaders
configuration.httpAdditionalHeaders = defaultHeaders
configuration.timeoutIntervalForRequest = 3
let supervisor = AlamofireManager(configuration : configuration)
return supervisor
}
}
In my interactor I name companies like
class AddNewCollectionFromAllCollectionInteractor{
var collectionService = CollectionService(supervisor: AlamofireManager.supervisor)
weak var presenter : AddNewCollectionFromAllCollectionPresenter!
}
extension AddNewCollectionFromAllCollectionInteractor :
AddNewCollectionFromAllCollectionInteractorProtocol{
func getAllCollectedProducts(request: CollectionGetAllSavedProductRequestModel) {
collectionService.getAllSavedProductList(request: request, accomplished: {[self](ret , error , statusCode) in
if error == nil {
presenter.listindDataComeFromServer(information: ret ?? Information(), statusCode: statusCode)
}else{
presenter.serverError(error: error!)
}
})
}
func cancelTask(){
collectionService.cancelManager()
}
}
My view seems like :
override func viewDidDisappear(_ animated: Bool) {
tremendous.viewDidDisappear(true)
presenter.cancelTask() // presenter goes interactor.cancelTask()
}
That is my CollectionService :
class CollectionService {
personal let supervisor : AlamofireManager!
init(supervisor : AlamofireManager) {
self.supervisor = supervisor
}
func cancelManager(){
supervisor.session.getAllTasks(completionHandler: { duties in
duties.forEach{ $0.cancel()}
})
}
}
And the final request is :
func getAllSavedProductList(request : CollectionGetAllSavedProductRequestModel , accomplished : @escaping (Information? , Error? , Int) -> Void){
// params header exc
self.supervisor.request(url, methodology: .get, parameters: mannequin, encoding: URLEncoding.queryString, headers: headers).responseString(completionHandler: { ret in
DispatchQueue.essential.asyncAfter(deadline: .now() + 3, execute: {
swap ret.consequence{
case .success(_):
Utils.hideLoadGif()
accomplished(ret.information , nil , ret.response?.statusCode ?? 200)
case .failure(let error):
Utils.hideLoadGif()
accomplished(nil,error , ret.response?.statusCode ?? 500)
}
})
})
}
I added
DispatchQueue.essential.asyncAfterto check it
Anyway when view will disappear beneath code is working
func cancelManager(){
supervisor.session.getAllTasks(completionHandler: { duties in
duties.forEach{ $0.cancel()}
})
}
However the duties rely is all the time zero. I search a number of questions on it , a number of utilizing this methodology or supervisor.session.invalidateAndCancel() this each shouldn’t be working as a result of I feel supervisor cannot see the present job due to this fact the duties rely is all the time zero.
Do I miss one thing or my Alamofire class cannot deal with this example.
[ad_2]
