2014-12-05 152 views
5

我需要将自定义用户代理字符串设置为NSURLSession的sharedSession。即每当我打电话给[NSURLSession sharedSession]时,它将默认包含我的自定义配置,我不需要每次都设置它。设置NSURLSession sharedSession的配置

我可以设置配置会话,

NSURLSession * session = [NSURLSession sharedSession]; 
NSString * userAgent = @"My String"; 
session.configuration.HTTPAdditionalHeaders = @{@"User-Agent": userAgent}; 

但我找不到如何配置设置为sharedSession可以随时在代码中使用。

+0

我处于同样的情况,我需要在新用户登录后更改配置中的某些访问令牌。因此,您是否找到任何可以更改的方法,并且是的,我阅读了答案。 – 2016-03-09 13:50:41

回答

11

那是因为你不能修改sh​​aredSession。想象一下,sharedSession是iOS设备的sharedSession,并被所有其他应用和框架使用。有意义的是它是不可配置的权利?该documentation它指出:

共享会话使用当前设置的全球NSURLCache, NSHTTPCookieStorage和NSURLCredentialStorage对象和基于 的默认配置。

你想要做的是定义一个自定义配置,这意味着你将需要你自己的会话对象和自己的配置。这就是为什么有特定的构造给你所需要的:

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration 
            delegate:(id<NSURLSessionDelegate>)delegate 
          delegateQueue:(NSOperationQueue *)queue 

为了简便起见,您可以使用[NSURLSessionConfiguration defaultSessionConfiguration]创建一个基本配置,然后设置附加头那里。

当然,你将负责保持该会话等

1

我也卡在这个问题上,我不得不改变授权在httpHeaders。丹尼尔答案是正确的,我们不能改变NSURLSession及其配置一旦设置。解决方法是在NSMutableURLRequest对象中设置标题,如

var request = NSMutableURLRequest() 
request.setValue("YourAccessToken", forHTTPHeaderField: "Authorization") 

回答:可能有人帮忙。

1

作为每@Daniel Galasko: 我加入以下:(刚刚更新作为其迅速2.3代码)再次

let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 
let additionalHeadersDict = ["User-Agent": "User name that you want", 
          "Accept-Language":"lamguages", 
          "Accept-Encoding": "Encoding type" ] 
sessionConfiguration.HTTPAdditionalHeaders = additionalHeadersDict 

由于@Daniel Galasko。如果你觉得我的有用,请回答他的答案。