3

エンティティ User の 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

同期的に送信する必要がある場合、putObjectなどのRKObjectManagerのコンビニエンスメソッドを使用することはできません。これらのコンビニエンスメソッドはすべて、ユーザーに代わって非同期でリクエストを送信するためです。代わりに、次のようなものを試すことができます。

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などのメソッドを設定してから、ブロック内のアプリを閉じます。たとえば、loader.onDidLoadObjectsメソッド内のコードは、putObjectが完了するまで実行されないため、画面またはアプリを閉じたい場合があります。これにより、先に進む前に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 に答える