Xcode 9 Swift 4用Tron发起HTTP请求遇NSURLErrorDomain -999错误求助
解决NSURLErrorDomain Code=-999 "cancelled" 请求取消问题
这个错误本质上是你的HTTP请求在完成前被提前终止了,结合你提供的代码和使用的Tron库,我来拆解常见原因和对应的修复方案:
最可能的原因:TRON实例被提前释放
你在getWaniWifiList()函数内部每次都创建新的TRON实例:
let tron = TRON.init(baseURL: Constants.waniBaseUrl)
当函数执行完毕后,这个局部的tron实例会被Swift的ARC自动释放,而Tron的请求是依赖于这个实例存在的——实例一被销毁,关联的请求就会被立刻取消,直接触发-999错误。
修复方案:复用TRON实例
把TRON实例改成全局变量、单例或者类的属性,确保在请求生命周期内它始终存在。比如改成类属性的方式:
// 假设这是你的网络管理类 class WaniNetworkManager { // 全局复用的TRON实例 private let tron: TRON init() { tron = TRON(baseURL: Constants.waniBaseUrl) } public func getWaniWifiList(){ var parameters : [String : String] = [:] parameters["version"] = Constants.waniAPIVersion let request: APIRequest<WaniRespModel, ErrorModel> = tron.swiftyJSON.request(Constants.waniAPI) request.method = .get request.parameters = parameters request.perform(withSuccess: {response in // 这里注意你原来的代码写错了,成功回调里打印"error"是笔误 print("WiFi列表获取成功:\(response)") }, failure: {error in print("请求失败:\(error)") }) } }
其他可能的排查方向
URL与参数配置错误
- 打印拼接后的完整URL确认有效性:在
request.perform前添加print(request.url!),检查地址是否正确,有没有拼写错误、路径拼接问题(比如baseURL结尾是否带斜杠,API路径开头是否带斜杠)。 - 确认
Constants.waniAPIVersion的值是否符合接口要求,有没有格式错误。
- 打印拼接后的完整URL确认有效性:在
ATS(App Transport Security)限制
Xcode 9默认开启ATS,如果你的接口是HTTP而非HTTPS,需要在Info.plist中配置ATS例外:- 添加
NSAppTransportSecurity字典,再添加NSAllowsArbitraryLoads并设置为YES(或者更安全的方式,针对特定域名配置NSExceptionDomains)。
- 添加
请求被其他逻辑中断
- 如果这个请求是在视图控制器中调用的,检查是否在请求执行过程中视图控制器被销毁(比如用户返回上一页),导致请求被取消。这种情况需要保留请求的引用,或者在视图控制器销毁时优雅地取消请求。
Tron库的版本兼容性
确认你使用的Tron版本是否支持Swift 4和Xcode 9,老旧版本可能存在兼容性问题,建议升级到对应版本的Tron和SwiftyJSON。
内容的提问来源于stack exchange,提问作者Asheesh
相关产品推荐
相关产品推荐

