3

我的实体用户有一个 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];
4

3 回答 3

6

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

RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil];
RKResponse* response = [loader sendSynchronously];
于 2011-09-07T13:58:36.147 回答
0

可以使用 RestKit 和 RKObjectManager 上的便捷方法来完成诀窍是使用积木

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

在我的回答中查看更多信息 -使用 RestKit 进行同步 HTTP 调用

于 2012-08-14T15:57:30.263 回答
0

关于什么:

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

RKResponse *response = [request sendSynchronously];
于 2012-11-04T16:43:36.137 回答