提问人:Muhammad Bilal Raza 提问时间:10/24/2023 最后编辑:Muhammad Bilal Raza 更新时间:10/24/2023 访问量:50
会话已失效 -- Alamofire
Session was Invalidated -- Alamofire
问:
我使用单例模式进行网络呼叫,但面临一个问题,任何人都可以帮我解决这个问题:会话无效
会话已失效且没有错误,因此它可能被意外取消初始化。请务必在请求期间保留对会话的引用。
我的网络包装器是
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)
}
}
}
答:
0赞
Jon Shier
10/24/2023
#1
这里有几个问题。
- 使用 of 表示您正在对可选值进行操作,这似乎是不必要的。此外,如果要替换此值,这可能是失效错误的原因,因为被替换的值在取消启动时将失效。
Session!
Session
- 你有 ,但你用来取消你所有的请求。这是不正确的,您需要在本地取消请求。
private var session: Session!
Session.default
session
- 像您一样手动取消所有请求是不必要的,并且可能会破坏 Alamofire 的内部假设。切勿直接与实例交互。相反,有一个方法可以用来做同样的事情。
URLSession
Session
cancelAll()
- Alamofire 不支持 iOS 9,因此不需要进行版本条件检查。
- 我建议你过渡到使用你的JSON解析,它要简单得多,而且Alamofire有内置的支持。
Decodable
评论