【问题标题】:Sequence requests Restkit 0.20序列请求 Restkit 0.20
【发布时间】:2014-01-15 02:21:52
【问题描述】:

环境: - MyViewController(相同的 ViewController)

使用RKObjectManager 引用AFHTTPClient (* client)。

1 - 第一个请求

[client setDefaultHeader:@"api_key" value:session.getApi_Key];
[client setDefaultHeader:@"Content-Length" value:postLength];
[client setDefaultHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];
[client setDefaultHeader:@"signature" value:signature];
[client setDefaultHeader:@"date" value:date];

[[RKObjectManager sharedManager] postObject:nil
                                       path:[SMRequestFactory getTokenRequestPath]
                                 parameters:[SMRequestFactory getTokenRequestParams: self.usuario.text : self.senha.text]
                                    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { **Call request 2** }
                                    failure:^(RKObjectRequestOperation *operation, NSError *error) {...}];

2 - 第二个请求

[client setDefaultHeader:@"api_key" value:session.getApi_Key];
[client setDefaultHeader:@"access_token" value:session.getAccessToken];
[client setDefaultHeader:@"signature" value:session.getSignature];
[client setDefaultHeader:@"date" value:session.getData];

[[RKObjectManager sharedManager] postObject:nil
                                       path:[SMRequestFactory getLoginRequestPath]
                                 parameters:[SMRequestFactory getLoginRequestParams]
                                    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { **Call request 3** }
                                    failure:^(RKObjectRequestOperation *operation, NSError *error) {...}];

3 - 第三次请求操作超时

[client setDefaultHeader:@"api_key" value:session.getApi_Key];
[client setDefaultHeader:@"access_token" value:session.getAccessToken];
[client setDefaultHeader:@"signature" value:session.getSignature];
[client setDefaultHeader:@"date" value:session.getData];

[[RKObjectManager sharedManager] getObjectsAtPath:[SMRequestFactory getUsuariosRequestPath]
                                       parameters:nil
                                          success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){ }
                                          failure:^(RKObjectRequestOperation *operation, NSError *error) {}];

如果按照顺序,第三个请求:服务器收到并响应但60秒后超时。

即使是按钮调用(之前不是成功),如果按照顺序,第三个请求也会超时。

当第一次调用时,第三个请求有效。

【问题讨论】:

  • 你检查过服务器日志吗?什么是会话 - 特别是在标题中设置的日期?是否同时发出任何其他请求(这可能会改变公共标头)?您需要清楚服务器期望在标头中接收什么。

标签: ios session restkit afnetworking restkit-0.20


【解决方案1】:

与其在成功代码块中“排序/链接”您的请求,不如尝试通过 GCD 异步调度调用它?

dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL);
dispatch_async(myQueue, ^{
    // Call next request
}); 

http://jeffreysambells.com/2013/03/01/asynchronous-operations-in-ios-with-grand-central-dispatch

【讨论】:

  • 我相信restkit api可能有一些事情要做。
  • 是的,它可能是,也许可以解决它?一般来说,异步串接你的请求是个好主意。
  • 问题中的代码将是异步的。不需要 GCD,RestKit 内部使用NSOperationQueue
  • 好的韦恩。但是关于第三个请求和超时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多