2011-09-06 25 views
3

同步调用我有一个objectMapping我的实体用户制作与RestKit

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

回答

6

如果您需要同步发送,你不会是能够使用上RKObjectManager,像putObject方便的方法,因为这些方便的方法的所有异步发送请求您代表。相反,你可以尝试类似如下:

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

,完美的工作,感谢(尽管到达网络,而在applicationDidEnterBackground使其崩溃:秒) – Nicolas

0

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

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

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

0

怎么样:

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

RKResponse *response = [request sendSynchronously];