使用RestKit进行同步调用

时间:2011-09-06 19:35:21

标签: ios synchronization 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];
}

但它不会让我在关闭应用程序时运行请求(我猜不允许新线程)。所以我想同步这样做。

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

[[RKObjectManager sharedManager] putObjectSynchronously:currentUser];

3 个答案:

答案 0 :(得分:6)

如果需要同步发送,则无法使用RKObjectManager上的便捷方法,例如putObject,因为这些便捷方法都代表您异步发送请求。相反,您可以尝试以下内容:

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

答案 1 :(得分:0)

可以使用RestKit和RKObjectManager上的便捷方法完成。技巧是使用块

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

在我的回答中查看更多内容 - Make a synchronous HTTP call with RestKit

答案 2 :(得分:0)

怎么样:

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

RKResponse *response = [request sendSynchronously];