2016-03-25 45 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 
     } 
    } 
} 

我敢肯定我的樹林尚未但是這至少會讓我們在這個問題上。