AFHTTPSessionManager子类swift
使用自定义会话configuration创buildAFHTTPSessionManager的singletone子类的正确方法是什么?
class DefaultSessionConfiguration: NSURLSessionConfiguration { override init () { super.init() self.HTTPShouldSetCookies = true HTTPCookieStorage?.cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always HTTPAdditionalHeaders = [ "Content-Type": "application/json"]; } } let baseUrl = "https://google.com" class HTTPManager: AFHTTPSessionManager { static let _sharedAPIManager = HTTPManager(baseURL: NSURL(string: baseUrl)!, sessionConfiguration:DefaultSessionConfiguration()) class var sharedInstance : HTTPManager { return _sharedAPIManager } override init(baseURL url: NSURL!, sessionConfiguration session:NSURLSessionConfiguration? ) { super.init(baseURL: url, sessionConfiguration: session) self.responseSerializer = AFJSONResponseSerializer() as AFJSONResponseSerializer self.requestSerializer = AFJSONRequestSerializer() as AFJSONRequestSerializer } }
当试图使用这个代码self.sessionManager = HTTPManager.sharedInstance
它总是崩溃的消息
[MyApp.DefaultSessionConfiguration setHTTPShouldSetCookies:]:无法识别的select器发送到实例0x7f99f8f31b70
但MyApp.DefaultSessionConfiguration是NSURLSessionConfiguration的子类,并且使用这个方法。
那么,我们如何解决这个问题呢?
问题是你不应该直接实例化一个NSURLSessionConfiguration
。 您应该通过调用以下类方法之一来实例化它: defaultSessionConfiguration
, ephemeralSessionConfiguration
或backgroundSessionConfigurationWithIdentifier
。 例如:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.HTTPShouldSetCookies = true configuration.HTTPCookieStorage?.cookieAcceptPolicy = .Always