2015-11-22 20 views
1

什么是使用自定义会话配置创建AFHTTPSessionManager的singletone子类的正确方法?AFHTTPSessionManager子类swift

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:]:无法识别 选择发送到实例0x7f99f8f31b70

但MyApp的.DefaultSessionConfiguration是NSURLSessionConfiguration的子类,通常使用这种方法。

那么,我们该如何解决这个问题呢?

+0

顺便说一句,您不必设置Content-Type头,因为使用AFJSONRequestSerializer会为您做到这一点。 – Rob

回答

1

问题是你不应该直接实例化NSURLSessionConfiguration。您应该通过调用以下类方法之一来实例化它:defaultSessionConfigurationephemeralSessionConfigurationbackgroundSessionConfigurationWithIdentifier。例如:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
configuration.HTTPShouldSetCookies = true 
configuration.HTTPCookieStorage?.cookieAcceptPolicy = .Always 
+0

史诗般的失败)thx! – alex