Ios 使用RestKit执行同步请求
您好,我想进行如上所述的RestKit同步调用,以便在调用成功块后返回myResult。您需要接受网络通信的异步性质和响应的后台处理,或者使用不同的API/技术专门进行同步请求。RestKit和AFNetworking更多地基于前者 采用异步是最好的选择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创建
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
- 如果需要有关创建
请求的帮助,请参阅
- 同样,如果您可以重写代码以异步工作,那么这可能比这个解决方案要好
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;