ios - 如何使用 DVR session 初始化 Alamofire Manager?

标签 ios swift alamofire nsurlsession

我想使用 DVR session 初始化 Alamofire Manager,以便记录和回放网络请求以进行测试。当 Manager's initializer访问Session的委托(delegate)会抛出无法识别的选择器异常。如果有人同时使用AlamofireDVR,可以分享一下你的初始化代码吗?

这是我所拥有的:

let api: OurAPI

let maybeSession = dvrCassetteName.flatMap{ cassetteName -> Session? in
    let delegate = Manager.SessionDelegate()
    let backingSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: delegate, delegateQueue: nil)
    let maybeBundle = NSBundle.allBundles().filter{ $0.bundlePath.lowercaseString.containsString("xctest") }.first
    if let bundle = maybeBundle {
        let session = Session(outputDirectory: "~/Desktop/DVR/", cassetteName: cassetteName, testBundle: bundle, backingSession: backingSession)
        return session
    } else {
        return nil
    }
}

if let session = maybeSession, manager = Alamofire.Manager(session: session, delegate: Manager.SessionDelegate()) {
    api = OurAPI(manager: manager)
} else {
    api = OurAPI()
}

Here's the PR在 Alamofire 上,介绍了我正在使用的初始化程序,在其讨论中他们讨论了我的用例,但没有提及无法识别的选择器。我还尝试 fork DVR 并覆盖 delegate 以指向 backingSession.delegate 但仍然遇到异常。

最佳答案

来自 Alamofire.Manager 的可失败 init 是此行的罪魁祸首:https://github.com/Alamofire/Alamofire/blob/master/Source/Manager.swift#L171

问题是我们无法直接在 session 上设置委托(delegate),因为它是一个仅获取属性。

为了解决这个问题,我必须采取以下措施:

class RecordSession: Session {
    override var delegate: NSURLSessionDelegate? {
        get {
            return backingSession.delegate
        }
    }
}

我很确定我还没有脱离困境,但这至少让我们解决了这个问题。

关于ios - 如何使用 DVR session 初始化 Alamofire Manager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228565/

相关文章:

ios - 我应该避免在Ensembles合并时保存到永久性存储中吗?

ios - iAd 支持我自己的广告商吗?

objective-c - 尝试实现时出现 iAD 错误

swift - ARKit相机初始位置?

swift - Alamofire 背景在模拟器上工作但不在设备上工作

ios - Alamofire 获取请求和 JSON 响应

ios - 如何向 Apple Store 提交 VUE/Cordova Mobile 应用程序?

ios - XCTestExpectation - 调用异步方法两次会导致 API 违规

swift - 创建 UITextFieldDelegate 以限制 Swift 中的字符数

ios - 使用 Flickr API 时的 Alamofire AFError