如何使用DVR会话初始化Alamofire Manager?

时间:2016-03-25 21:45:46

标签: ios swift alamofire nsurlsession dvr

我想用Alamofire Manager初始化DVR Session,以便记录和回放网络测试请求。当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,但仍然获得例外。

1 个答案:

答案 0 :(得分:0)

来自Alamofire.Manager的可用初始化是此行的罪魁祸首:https://github.com/Alamofire/Alamofire/blob/master/Source/Manager.swift#L171

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

以下是解决这个问题我必须做的事情:

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

我很确定我还没有成为森林,但这至少让我们解决了这个问题。