2016-03-25 30 views
0

我想初始化一个Alamofire ManagerDVR Session为了记录和回放测试的网络请求。当Manager's initializer访问Session的代表时,它会抛出一个unrecognized selector异常。如果任何人使用AlamofireDVR在一起,你能分享你的初始化代码吗?如何使用DVR会话初始化Alamofire Manager?

这是我有:在Alamofire

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,介绍我使用的初始化,在其讨论他们讨论我的使用情况,但有没有unrecognized selector提及。我也试过拨DVR并覆盖delegate指向backingSession.delegate但仍然得到例外。

回答

0

从Alamofire.Manager的failable初始化是在这条线的罪魁祸首:https://github.com/Alamofire/Alamofire/blob/master/Source/Manager.swift#L171

的问题是,我们不能直接设置委托的会议,因为它是一个只得到属性。

这是我必须做的,以解决此问题:

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

我敢肯定我的树林尚未但是这至少会让我们在这个问题上。