2015-11-22 3 views
1

Каков правильный способ создания одиночного подкласса AFHTTPSessionManager с пользовательской настройкой сеанса?Подкласс 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 и defenetly имеет этот метод.

Итак, как мы решаем эту проблему?

+0

Кстати, вам не нужно устанавливать заголовок 'Content-Type', потому что использование' AFJSONRequestSerializer' сделает это за вас. – Rob

ответ

1

Проблема в том, что вы не должны создавать экземпляр NSURLSessionConfiguration напрямую. Вы должны создать экземпляр, вызвав один из следующих методов класса: defaultSessionConfiguration, ephemeralSessionConfiguration или backgroundSessionConfigurationWithIdentifier. Например:

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

epic fail) thx! – alex

Смежные вопросы