我的实体用户
有一个objectMappingRKObjectMapping* 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];
答案 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];