使用RestKit进行同步调用

我有一个objectMapping为我的实体用户

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class]]; [userMapping mapKeyPath:@"first_name" toAttribute:@"firstName"]; [userMapping mapKeyPath:@"last_name" toAttribute:@"lastName"]; [manager.mappingProvider setMapping:userMapping forKeyPath:@"users"]; [manager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]]; 

而我想保存他的个人资料,当应用程序进入后台:

 - (void)applicationDidEnterBackground:(UIApplication *)application { [[RKObjectManager sharedManager] putObject:currentUser delegate:self]; } 

但它不会让我在closures应用程序时运行请求(我猜测没有新的线程是允许的)。 所以我想同步做到这一点。

但是,我没有设法与RestKit做到这一点。 我身边有一些误解吗? 我想拥有:

 [[RKObjectManager sharedManager] putObjectSynchronously:currentUser]; 

如果你需要同步发送,你将不能在RKObjectManager上使用便捷方法,比如putObject,因为这些便捷方法都是以你的方式asynchronous发送请求的。 相反,你可以尝试如下的东西:

 RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil]; RKResponse* response = [loader sendSynchronously]; 

可以使用RestKit和RKObjectManager上的便捷方法来完成。 窍门是使用块

在你的情况下,你会使用该块进行请求,在“loader”上设置正常的onDidFail,onDidLoadObjects,onDidLoadResponse等方法,而不是作为类中的委托方法,然后closures块内的应用程序。 例如,loader.onDidLoadObjects方法内的代码将在putObject完成之前不会被执行,所以这可能是您希望closures屏幕或应用程序的地方。 这将确保putObject在继续之前完成。

在我的答案中查看更多 – 使用RestKit进行同步HTTP调用 。

关于什么:

 RKRequest *request = [client post:@"/service" params:params delegate:restDelegate]; RKResponse *response = [request sendSynchronously];