You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)")
        })
    }
}

其他可能的排查方向

  1. URL与参数配置错误

    • 打印拼接后的完整URL确认有效性:在request.perform前添加print(request.url!),检查地址是否正确,有没有拼写错误、路径拼接问题(比如baseURL结尾是否带斜杠,API路径开头是否带斜杠)。
    • 确认Constants.waniAPIVersion的值是否符合接口要求,有没有格式错误。
  2. ATS(App Transport Security)限制
    Xcode 9默认开启ATS,如果你的接口是HTTP而非HTTPS,需要在Info.plist中配置ATS例外:

    • 添加NSAppTransportSecurity字典,再添加NSAllowsArbitraryLoads并设置为YES(或者更安全的方式,针对特定域名配置NSExceptionDomains)。
  3. 请求被其他逻辑中断

    • 如果这个请求是在视图控制器中调用的,检查是否在请求执行过程中视图控制器被销毁(比如用户返回上一页),导致请求被取消。这种情况需要保留请求的引用,或者在视图控制器销毁时优雅地取消请求。
  4. Tron库的版本兼容性
    确认你使用的Tron版本是否支持Swift 4和Xcode 9,老旧版本可能存在兼容性问题,建议升级到对应版本的Tron和SwiftyJSON。

内容的提问来源于stack exchange,提问作者Asheesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:23:42