会话已失效 -- Alamofire

Session was Invalidated -- Alamofire

提问人:Muhammad Bilal Raza 提问时间:10/24/2023 最后编辑:Muhammad Bilal Raza 更新时间:10/24/2023 访问量:50

问:

我使用单例模式进行网络呼叫,但面临一个问题,任何人都可以帮我解决这个问题:会话无效

会话已失效且没有错误,因此它可能被意外取消初始化。请务必在请求期间保留对会话的引用。

我的网络包装器是

public static let shared = NetworkingClient()
    private var requests = [ApiRequest]()
    private var completedRequests = 0
    private var session: Session!
    func InvalidateSession () {
        if #available(iOS 9.0, *) {
            Alamofire.Session.default.session.getAllTasks { (tasks) in
                    tasks.forEach{ $0.cancel() }
                }
            } else {
            Alamofire.Session.default.session.getTasksWithCompletionHandler { (sessionDataTask, uploadData, downloadData) in
                sessionDataTask.forEach { $0.cancel() }
                uploadData.forEach { $0.cancel() }
                downloadData.forEach { $0.cancel() }
            }
        }
    }

这是我的 Api 调用 secanrio 是增加数量然后崩溃 alomofire 我想停止发送请求多个请求 我只想发送请求 api 1 次

func gasEstimation(chain_Id: Int, contractAddress: String, fromAddress: String, toAddress: String, tokenId: String, contractType: String, quantity: String) {
        let apiRequest = [ApiRequest(type: .get, path: "gasEstimation?chainId=\(chain_Id)&contractAddress=\(contractAddress)&from=\(fromAddress.trimmingCharacters(in: .whitespacesAndNewlines))&to=\(toAddress.trimmingCharacters(in: .whitespacesAndNewlines))&type=\(contractType)&quantity=\(quantity)&tokenId=\(tokenId)")]
        NetworkingClient.shared.performRequest(requests: apiRequest) { path, data, error in
            if data != nil {
                let json =  JSON(data!)
                let gasTokenModel = NftTransferModel(json: json)
                self.presenter?.onReceiveFee(estimationFee: gasTokenModel,error: nil)
            }else{
                let error = JSON(error!)
                self.presenter?.onReceiveFee(estimationFee: nil,error: error["message"].stringValue)
            }
        }
    }
Swift 会话 网络 Alamofire

评论

0赞 Chandaboy 10/24/2023
你能在调用API时更新你的代码吗?
0赞 Muhammad Bilal Raza 10/24/2023
@Chandaboy我更新了代码,请检查

答:

0赞 Jon Shier 10/24/2023 #1

这里有几个问题。

  1. 使用 of 表示您正在对可选值进行操作,这似乎是不必要的。此外,如果要替换此值,这可能是失效错误的原因,因为被替换的值在取消启动时将失效。Session!Session
  2. 你有 ,但你用来取消你所有的请求。这是不正确的,您需要在本地取消请求。private var session: Session!Session.defaultsession
  3. 像您一样手动取消所有请求是不必要的,并且可能会破坏 Alamofire 的内部假设。切勿直接与实例交互。相反,有一个方法可以用来做同样的事情。URLSessionSessioncancelAll()
  4. Alamofire 不支持 iOS 9,因此不需要进行版本条件检查。
  5. 我建议你过渡到使用你的JSON解析,它要简单得多,而且Alamofire有内置的支持。Decodable