当前位置:  开发笔记 > IOS > 正文

取消Alamofire的所有网络服务电话

如何解决《取消Alamofire的所有网络服务电话》经验,为你挑选了2个好方法。

在我的项目中,有4个Web服务在后台运行.我想在没有等待响应的情况下从当前状态注销时停止所有这些服务.我找到了这样做的代码

Alamofire.Manager.sharedInstance.session.invalidateAndCancel()

但在打电话给我之后,我无法再次拨打服务电话.有什么办法可以取消所有正在运行的请求吗?

这是我的服务调用代码

func getAllCount(parameters: [String: AnyObject],completion: (success : Bool) -> Void) {

            PKHUD.sharedHUD.contentView = PKHUDTextView(text: "Loading...")
            PKHUD.sharedHUD.show()
            request = Alamofire.request(.POST, GlobalConstants.KGetAllCount, parameters: parameters, encoding:.JSON).responseJSON
                {
                    response in switch response.result {
                    case .Success(let JSON):
                        PKHUD.sharedHUD.hide()
                        print("Success with JSON: \(JSON)")
                        let status : NSString = JSON.valueForKey("status") as! String
                        if(status .isEqualToString("1")){
                            MyViewState.QJoined = JSON.valueForKeyPath("data.TotalJoinQueue") as! String
                            MyViewState.Qstarted = JSON.valueForKeyPath("data.TotalCreatedQueue") as! String
                            MyViewState.Bumps = JSON.valueForKeyPath("data.TotalBump") as! String
                            completion(success: true)

                            break
                        }else{
                            completion(success: false)
                            Helper.globalAlert(JSON.valueForKey("data") as! String)
                            break
                        }
                    case .Failure(let error):
                        PKHUD.sharedHUD.hide()
                        print("Request failed with error: \(error)")
                        completion(success: false)
                        break

                    }
            }
        }

Alex Pelleti.. 9

据我所知,没有明显/简单的方法来重新创建会话.处理此问题的建议方法是保留请求数组,static var requests = [Alamofire.Request?]()然后在要停止所有可以调用的请求时使用request.cancel().使用此方法,您必须在创建后附加每个请求.

class func stopAllRequests(){
    for request in MyClass.requests{
        if let request = request{
            request.cancel()
        }
    }
}

类似问题



1> Alex Pelleti..:

据我所知,没有明显/简单的方法来重新创建会话.处理此问题的建议方法是保留请求数组,static var requests = [Alamofire.Request?]()然后在要停止所有可以调用的请求时使用request.cancel().使用此方法,您必须在创建后附加每个请求.

class func stopAllRequests(){
    for request in MyClass.requests{
        if let request = request{
            request.cancel()
        }
    }
}

类似问题



2> chuthan20..:

NSURLSession确实有这些方法可以返回所有尚未完成的请求.你可以得到它们,循环遍历它们并取消每一个 - 类似于上面人们的建议.

    if #available(iOS 9.0, *) {
        Manager.sharedInstance.session.getAllTasksWithCompletionHandler { (tasks) -> Void in
            tasks.forEach({ $0.cancel() })
        }
    } else {
        // Fallback on earlier versions
        Manager.sharedInstance.session.getTasksWithCompletionHandler({
            $0.0.forEach({ $0.cancel() })
            $0.1.forEach({ $0.cancel() })
            $0.2.forEach({ $0.cancel() })
        })
    }

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有