をキャンセルalamofire:迅速、私はすべての私のalamofire要求がなさNetworkRequestクラス、持っている前の要求
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()
}
}
}
をそして、私は、以前のdownloadData要求をキャンセルする必要があり、新しいものが始まるとき、currentRequestを使用してキャンセルしようとしましたか? .cancel()、しかしそれは助けにはならない。
すでにNSOperationsBlockを使用して操作をキャンセルしようとしましたが、現在の操作はキャンセルされません。
私は今UIをブロックしているので、ユーザーは別のリクエストを送信できません。しかし、これは正しくない、あなたが要求をキャンセルしたい場合は、あなたが行った要求をトレースし、それをキャンセルしようとする必要がある
私は素早くプログラミングではかなり新しいです。リクエストを配列に格納してキャンセルするにはどうすればよいですか? –
あなたはそれを配列に格納できますが、まず私の提案をチェックしてください – ciccioska