我有什么办法可以说:
Alamofire.Manager.cancelAllRequests()
或Alamofire.Manager.sharedInstance.cancelAllRequests()
?
当然,如果这些请求(特别是在图像下载的情况下)只会暂停,以便稍后我会使用相同的网址但是...我至少需要能够取消所有请求全球一级。一些建议?
在我的应用程序中,我在Alamofire.request(.Post ....)上面有一个包装器,所以我真的很感激不要让我以另一种方式创建或与Manager类交互,除了上面指定的。 / p>
答案 0 :(得分:61)
cnoon
的单行解决方案很棒,但它会使NSURLSession无效,你需要创建一个新的。
另一个解决方案就是这个(iOS 7 +):
session.getTasks { dataTasks, uploadTasks, downloadTasks in
dataTasks.forEach { $0.cancel() }
uploadTasks.forEach { $0.cancel() }
downloadTasks.forEach { $0.cancel() }
}
或者如果您仅定位iOS 9+:
session.getAllTasks { tasks in
tasks.forEach { $0.cancel() }
}
答案 1 :(得分:15)
您应该直接使用NSURLSession
方法来完成此任务。
Alamofire.Manager.sharedInstance.session.invalidateAndCancel()
这将调用所有完成处理程序,并显示取消错误。如果您需要能够恢复下载,那么您需要从请求中获取resumeData
(如果可用)。然后在准备好时使用简历数据恢复请求。
答案 2 :(得分:8)
以下代码停止[Swift 3]中的请求:
此外,该代码适用于 Alamofire v3& v4 加上 iOS 8 + 。
func stopTheDamnRequests(){
if #available(iOS 9.0, *) {
Alamofire.SessionManager.default.session.getAllTasks { (tasks) in
tasks.forEach{ $0.cancel() }
}
} else {
Alamofire.SessionManager.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
sessionDataTask.forEach { $0.cancel() }
uploadData.forEach { $0.cancel() }
downloadData.forEach { $0.cancel() }
}
}
}
只需复制并粘贴该功能。
答案 3 :(得分:2)
完成@LoïsDiQual后,您可以查看请求网址并取消(暂停,恢复)您需要的请求:
downloadTasks.forEach
{
if ($0.originalRequest?.url?.absoluteString == url)
{
$0.cancel()
}
}
答案 4 :(得分:1)
如果有帮助,我得到了cnoon的回答,就我自己的Alamofire.Manager
实例工作了。我有一个名为NetworkHelper的单例类,它有一个名为alamoFireManager的属性,它处理我的所有网络请求。我只需在NSURSession
属性上调用invalidateAndCancel()
alamoFireManager
,在setAFconfig()
重置我的经理,然后我就可以了。
class NetworkHelper {
private var alamoFireManager : Alamofire.Manager!
class var sharedInstance: NetworkHelper {
struct Static {
static var instance: NetworkHelper?
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token) {
Static.instance = NetworkHelper()
}
return Static.instance!
}
init(){
setAFconfig()
}
func setAFconfig(){
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForResource = 4
configuration.timeoutIntervalForRequest = 4
alamoFireManager = Alamofire.Manager(configuration: configuration)
}
func cancelAllRequests() {
print("cancelling NetworkHelper requests")
alamoFireManager.session.invalidateAndCancel()
setAFconfig()
}
答案 5 :(得分:1)
在Swift 2.2中
let session = Alamofire.Manager.sharedInstance.session
session.getAllTasksWithCompletionHandler() { tasks in
tasks.forEach { $0.cancel() }
}
答案 6 :(得分:1)
在Alamofire5中,您可以使用:
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.js"></script>
答案 7 :(得分:0)
class func StopAPICALL() {
let sessionManager = Alamofire.SessionManager.default
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
dataTasks.forEach { $0.cancel() }
uploadTasks.forEach { $0.cancel() }
downloadTasks.forEach { $0.cancel() }
}
}
答案 8 :(得分:0)
Swift 5+ 和 Alamofire 5.4.1
AF.session.getAllTasks { (tasks) in
tasks.forEach {$0.cancel() }
}