Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用RestKit执行同步请求_Ios_Objective C_Restkit_Afnetworking_Synchronous - Fatal编程技术网

Ios 使用RestKit执行同步请求

Ios 使用RestKit执行同步请求,ios,objective-c,restkit,afnetworking,synchronous,Ios,Objective C,Restkit,Afnetworking,Synchronous,您好,我想进行如上所述的RestKit同步调用,以便在调用成功块后返回myResult。您需要接受网络通信的异步性质和响应的后台处理,或者使用不同的API/技术专门进行同步请求。RestKit和AFNetworking更多地基于前者 采用异步是最好的选择 也就是说,您可以使用RestKit创建NSURLRequest,然后使用NSURLConnection同步下载响应,然后使用RKMapperOperation执行映射(并使用addOperations:waitUntilFinished:等待完

您好,我想进行如上所述的RestKit同步调用,以便在调用成功块后返回myResult。

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

采用异步是最好的选择


也就是说,您可以使用RestKit创建
NSURLRequest
,然后使用
NSURLConnection
同步下载响应,然后使用
RKMapperOperation
执行映射(并使用
addOperations:waitUntilFinished:
等待完成)。您可以使用以下方法:

- (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;

}
注:

  • 完成块是在操作完成后调用的,因此如果提供成功/失败块,则在方法返回之前不会调用它们
    • (这就是为什么我建议您将
      nil
      传递到完成块。)
  • waitUntilFinished
    将阻止您所在的任何线程,因此请确保它不是主线程
  • 如果需要有关创建
    请求的帮助,请参阅
  • 同样,如果您可以重写代码以异步工作,那么这可能比这个解决方案要好

RestKit构建在AFNetworking之上,而AFNetworking不能做到这一点。你能发布你想要同步返回的理由吗?如果您完全可以重写代码,其中完成块调用触发所需行为的方法,那么这几乎肯定会更好。库同步使用该块返回布尔值。这很有效!非常感谢你!唯一的缺点是您无法轻松发布对象,只有参数。@ageorgios您应该能够通过使用
multipartFormRequestWithObject:method:path:parameters:constructingBodyWithBlock:
发出请求来发布对象。因此,对于核心数据支持的RestKit用户,有一个
RKManagedObjectRequestOperation
等价物。我一直在使用MLPAUTOMPLETE()该控件调用该方法以匹配字符串(异步)。因此,这种阻塞响应并返回响应的方法在我的例子中是理想的,因为主线程没有被阻塞。非常感谢。
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;