Mam klasy NetworkRequest, gdzie wszystkie moje prośby alamofire wykonany:Swift, alamofire anulować poprzedni wniosek
class NetworkRequest {
static let request = NetworkRequest()
var currentRequest: Alamofire.Request?
let dataManager = DataManager()
let networkManager = NetworkReachabilityManager()
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
func downloadData<T: Film>(slug: String, provider: String, section: String, dynamic: String, anyClass: T, completion: ([T]?) -> Void) {
var token: String = ""
if LOGGED_IN == true {
token = "\(NSUserDefaults.standardUserDefaults().valueForKey(TOKEN)!)"
}
let headers = [
"Access": "application/json",
"Authorization": "Bearer \(token)"
]
let dataUrl = "\(BASE_URL)\(slug)\(provider)\(section)\(dynamic)"
print(headers)
print(dataUrl)
if networkManager!.isReachable {
currentRequest?.cancel()
dispatch_async(dispatch_get_global_queue(priority, 0)) {
if let url = NSURL(string: dataUrl) {
let request = Alamofire.request(.GET, url, headers: headers)
request.validate().responseJSON { response in
switch response.result {
case .Success:
if let data = response.result.value as! [String: AnyObject]! {
let receivedData = self.dataManager.parseDataToFilms(data, someClass: anyClass)
completion(receivedData)
}
case .Failure(let error):
print("Alamofire error: \(error)")
if error.code == 1001 {
self.goToNoConnectionVC()
}
print("canceled")
}
}
}
}
} else {
goToNoConnectionVC()
}
}
}
I muszę odwołać poprzednią prośbę downloadData, gdy nowa zaczyna, próbował anulować używając currentRequest? .cancel(), ale to nie pomaga.
Próbowano już anulować operacje przy użyciu blokady NSOperationsBlock, ale nie anuluje ona bieżącej operacji.
Blokuję teraz interfejs użytkownika, aby użytkownik nie mógł wysłać kolejnego żądania. Ale to nie jest poprawne, powoduje pewne błędy później ...
PLS pomóc
Jestem całkiem nowy w szybkim tempie i programowaniu. Jak mogę przechowywać żądania w tablicy i anulować je? –
Możesz zapisać go do tablicy, ale przede wszystkim sprawdź moją sugestię – ciccioska