使用RestKit执行同步请求

时间:2013-12-14 22:38:29

标签: ios objective-c restkit afnetworking synchronous

- (BOOL)do_a_Restkit_request_and_return_a_boolean
{
     [manager postObject:nil path:@"/mypath" parameters:@{@"password":password} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
          myResult = [mappingResult firstObject] == 5;
      } failure:^(RKObjectRequestOperation *operation, NSError *error) {
      }];

      return myResult;

}

您好我想像上面的Synchronous一样进行RestKit调用,以便在调用Success块后返回myResult。

2 个答案:

答案 0 :(得分:4)

你可以使用这样的方法:

NSMutableURLRequest *request = // create a request…
RKObjectRequestOperation *operation = [manager objectRequestOperationWithRequest:request success:nil failure:nil];
[operation start];
[operation waitUntilFinished];

BOOL myResult = NO;

if (!operation.error) {
      myResult = [operation.mappingResult firstObject] == 5;
}

return myResult;

注意:

  • 在操作完成后,完成块被称为,因此如果您提供成功/失败块,则方法返回后才会调用它们
    • (这就是为什么我建议你将nil传递给完成块。)
  • waitUntilFinished将阻止您所使用的任何线程,因此请确保它不是主线程。
  • 如果您需要帮助创建request,请参阅Creating Request Objects in the RKObjectManager Class Reference
  • 同样,如果您可以重写代码以异步工作,那么这可能比此解决方案更好。

答案 1 :(得分:1)

您需要接受网络通信的异步特性和响应的后台处理,或者使用专门用于发出同步请求的不同API /技术。 RestKit和AFNetworking更多地基于前者。

拥抱异步是最好的选择......

也就是说,您可以使用RestKit创建NSURLRequest,然后使用NSURLConnection同步下载响应,然后使用RKMapperOperation执行映射(并等待{ {1}})。