【问题标题】:RestKit / AFNetworking - Send only one request at a time (queue)RestKit / AFNetworking - 一次只发送一个请求(队列)
【发布时间】:2015-05-06 09:33:34
【问题描述】:

我正在使用 RestKit / AFNetworking 与私有 api 进行通信。此 API 在每次调用时都会返回一个带有 sessionID 的 cookie。如果您使用已使用的 sessionID 进行呼叫,它将返回错误。所以每个 sessionID 只能使用一次。

问题是当同时发送两个请求时,一个会失败,因为它们都在 cookie 中使用相同的 sessionID 发送。

有没有办法让 RestKit / AFNetworking 只在最后一个调用返回下一个 sessionID 后才执行我的调用? 我希望能够只发送呼叫,但在最后一次呼叫成功或失败后延迟它们。

【问题讨论】:

  • 在afnetworking中调用成功或失败块进行第二次调用。
  • 是的,没错。这样可行。但我真的不想这样做,因为 api 调用可能发生在用户输入上。而且我无法预见用户按什么顺序做什么。我也不太想建立自己的排队系统。
  • cookie是自动设置的还是你需要做点什么?

标签: ios objective-c rest afnetworking restkit


【解决方案1】:

这正是 NSOperationQueue 的用途:

初始化一个 NSOperationQueue 并将并发任务数设置为 1:

NSOperationQueue *queue = [NSOperationQueue new];
queue.maxConcurrentOperationCount = 1;

一定要保留对队列的引用,否则它将被释放。

要将您的 HTTP 调用添加到队列中,您必须继承 NSOperation。编写您的子类,以便每个 NSOperation 实例在操作的 -main 方法中发出 同步 HTTP 请求,然后为下一个操作设置会话 ID:

-(void)main {
// read the previous session ID
NSString *sessionID = [MyDataSingleton sharedInstance].sessionID;

//make synchronous call
...

//Set the session ID for the next operation
[MyDataSingleton sharedInstance].sessionID = sessionID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多