【问题标题】:How can I initialize an Alamofire Manager with a DVR Session?如何使用 DVR 会话初始化 Alamofire 管理器?
【发布时间】:2016-03-25 21:45:45
【问题描述】:

我想用DVR Session 初始化Alamofire Manager,以便记录和回放网络请求以进行测试。当Manager's initializer 访问Session 的委托时,它会抛出unrecognized selector 异常。如果有人同时使用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 上介绍了我正在使用的初始化程序,在讨论中他们讨论了我的用例,但没有提到 unrecognized selector。我也尝试过分叉DVR 并覆盖delegate 以指向backingSession.delegate,但仍然出现异常。

【问题讨论】:

    标签: ios swift alamofire nsurlsession


    【解决方案1】:

    来自 Alamofire.Manager 的失败初始化是这一行的罪魁祸首:https://github.com/Alamofire/Alamofire/blob/master/Source/Manager.swift#L171

    问题是我们不能直接在会话上设置委托,因为它是一个 get-only 属性。

    为了解决这个问题,我必须做以下事情:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-07
      • 2019-04-30
      • 2017-02-04
      • 2021-05-24
      • 2019-12-11
      • 1970-01-01
      • 2015-11-18
      • 2013-10-14
      相关资源
      最近更新 更多