如何使用 DVR 会话初始化 Alamofire 管理器?
Posted
技术标签:
【中文标题】如何使用 DVR 会话初始化 Alamofire 管理器?【英文标题】:How can I initialize an Alamofire Manager with a DVR Session? 【发布时间】:2016-03-25 21:45:45 【问题描述】:我想用DVR Session
初始化Alamofire Manager
,以便记录和回放网络请求以进行测试。当Manager
's initializer 访问Session
的委托时,它会抛出unrecognized selector
异常。如果有人同时使用Alamofire
和DVR
,可以分享一下你的初始化代码吗?
这是我所拥有的:
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】:来自 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
我很确定我还没有陷入困境,但这至少让我们解决了这个问题。
【讨论】:
以上是关于如何使用 DVR 会话初始化 Alamofire 管理器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Alamofire 和会话管理器附加 MultipartFormData 以及其他帖子参数? [复制]