我正在创建Alamofire请求,startRequestsImmediately
设置为false。然后我将一个块排入NSOperationQueue,该请求在请求上调用resume()
。如果我需要暂停传出请求,我只需暂停队列并让它们缓冲。一旦我取消挂起队列,就会调度任何请求。
有时,当队列被暂停时,我需要更改其中任何现有请求的标头(例如授权令牌)。我还没有办法做到这一点(我尝试的任何事情都没有生效)。是否可以使用NSURLSessionTask?是否可以替换给定请求的NSURLSessionTask(使用更新的头文件)?
答案 0 :(得分:2)
创建Alamofire.Request
后,它会立即创建一个NSURLSessionTask
,一旦创建,它就是有效的只读。因此,我发现的唯一选择是推迟创建Request
,直到我的请求即将运行。
但是,Request
对象是您设置响应处理程序的对象。例如,客户希望调用类似:request().response(...).response(...)
的内容。 Alamofire的request()
返回Request
对象,您可以多次调用response()
对象,以便设置响应处理程序,该请求将在请求完成后运行。但是如果您需要推迟创建Request
,直到您知道它将要运行 - 这样您就可以使用当时的最新标题 - 如何将其返回给客户端以便他们可以调用{{ 1}}吗?
我这样做的方法是在我的.response()
派生类上创建一个myRequest()
包装器(而不是能够覆盖实际的request()
函数/名称),需要一个额外的参数 - 一个'请求就绪'块(它本身需要一个Alamofire.Manager
)而不是从Alamofire.Request
返回Request
,myRequest()
,不返回任何内容,而是调用正如请求即将被分派一样,阻止(传递myRequest()
)。
类似
Request
manager.request(.GET, "endpoint").responseJSON(…)
通过这种方式,我可以推迟创建manager.myRequest(.GET, "endpoint") { request in
request.responseJSON(...)
}
(立即创建基础Alamofire.Request
并锁定标题,因为它们在那一刻)直到以后,同时不会给客户带来太多不便他们如何指定响应处理程序。
NSURLSessionTask
看起来像这样(不包括特定于应用的内容):
myRequest()