iOS Alamofire停止所有请求

时间:2015-10-07 18:33:33

标签: ios alamofire

我有什么办法可以说:

Alamofire.Manager.cancelAllRequests()Alamofire.Manager.sharedInstance.cancelAllRequests()

当然,如果这些请求(特别是在图像下载的情况下)只会暂停,以便稍后我会使用相同的网址但是...我至少需要能够取消所有请求全球一级。一些建议?

在我的应用程序中,我在Alamofire.request(.Post ....)上面有一个包装器,所以我真的很感激不要让我以另一种方式创建或与Manager类交互,除了上面指定的。 / p>

9 个答案:

答案 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)


如何迅速停止Api调用Alomofire

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() }
        }