gpt4 book ai didi

ios - 在 Swift 3.0 (Alamofire 4.4.0) 中发出一些请求后,Alamofire 停止工作

转载 作者:行者123 更新时间:2023-11-28 06:22:43 25 4
gpt4 key购买 nike

关键信息:

  1. 计划从 2.3 迁移到 Swift 3.0。
  2. Xcode 版本 8.2.1,iOS 版本 10.2,Alamaofire 4.4.0,AlamofireObjectMapper 4.1.0

Alamofire 在进行某些调用后停止调用。我没有收到回调,并且在 Charles 停止工作后我看不到任何网络调用。

我使用一个管理器进行调用,该管理器又调用一个辅助客户端类,该类请求 Alamofire 获取我存储在客户端数组中的请求对象。您可以在下面看到我的类(class)的部分代码。

// This is in BaseClient
/* GET Request
default response with mappable data and NSerror
*/
@discardableResult
class func getRequest<T: Mappable>(_ apiRoute: String, params: [String: Any], credentialsRequired: Bool = false, completion: @escaping (T?, Error?) -> Void) -> DataRequest {
let headers = additionalHeaders(credentialsRequired)
let request = Alamofire.request(getURL(for: apiRoute), method: .get, parameters: params, headers: headers)
.responseObject { (response: DataResponse<DefaultResponse<T>>) -> Void in
logResponse(response.result.value)
if let error = self.checkForError(response, endPoint: apiRoute) {
completion(nil, error)
} else {
completion(response.result.value?.data, nil)
}
}

logCurl(request)
return request
}

这是辅助客户端类

    import ObjectMapper
import Alamofire

class PackageClient: BaseClient {
fileprivate struct PackagesEndPoint {
static let inspire = "/api/v2/something"
}

fileprivate static var currentRequests = [Request]()

class func cancelAllFetchRequests() {
for item in currentRequests {
item.cancel()
}
currentRequests = [Request]()
}

class func fetchInspire(_ completion: @escaping (_ response: InspireResponse?, _ error: Error?) -> Void) {
PackageClient.cancelAllFetchRequests()

var params = [String: Any]()
params["product"] = "flight,event,package"
let request = getRequest(PackagesEndPoint.inspire,
params: params,
credentialsRequired: false){ (response: InspireResponse?, error: Error?) in
completion(response, error)
}
currentRequests.append(request)
}
}

这是在 PackageManager 中:

    PackageClient.fetchInspire { [weak self] (response, error) in

if error == nil {
self?.inspireResponse = response
}
self?.finishLoading(error: error)
}

问题是一旦 Alamofire 停止工作,那么像下面这样的简单调用也不会进行任何网络调用......我在 charles 上看不到任何东西,显然没有回调返回。

Alamofire.request(URL(string: urlString), method: .get, parameters: parameters, encoding: JSONEncoding.default)
.validate { request, response, data in
// Custom evaluation closure now includes data (allows you to parse data to dig out error messages if necessary)
return .success
}
.responseJSON { response in
debugPrint(response)
}

感谢任何帮助。我花了 2 天时间调试这个。 :(

最佳答案

这件事也发生在我身上。我在导致死锁的代码中使用了 objc_sync_enter(self) 调用。

This issue Github 上的 Alamofire 可能会对您有所帮助。

关于ios - 在 Swift 3.0 (Alamofire 4.4.0) 中发出一些请求后,Alamofire 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com