1

RestKit は、次のコード チャンクを使用してマルチタスクをサポートするために使用されます。

RKRequest* request = [[RKClient sharedClient] post:@"/upload" delegate:self];
request.backgroundPolicy = RKRequestBackgroundPolicyContinue;

最新バージョン (0.20.x) を見ていますが、バックグラウンド ポリシー列挙への参照が見当たりません。RestKitの最新バージョンでこれを呼び出す方法を知っている人はいますか?

編集: 以下の Wain の回答によると、次のように GET メソッドに対してこれを実行できることがわかりました。

RKHTTPRequestOperation *requestOperation = [[RKHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]];    
[requestOperation setShouldExecuteAsBackgroundTaskWithExpirationHandler:nil];

RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithHTTPRequestOperation:requestOperation responseDescriptors:@[responseDescriptor]];
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    // handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    // handle failure
}];

[operation start];

しかし、RKObjectManager POST メソッドは内部で RKObjectRequestOperation を作成し、それにアクセスできないため、POST に相当するものはないようです。

これを設定する別の方法があるかどうか誰かが知っていますか? そうでなければ、この設定へのアクセスを提供する独自の拡張メソッドを作成できると思います。

4

1 に答える 1

1

すべてが標準としてバックグラウンドで実行され、メイン スレッドに戻って完了ハンドラが呼び出されます。処理をバックグラウンド スレッドにプッシュするために何もする必要はありません。

編集:誤解をお詫びします。バックグラウンド タスクは、RestKit の外部または AFNetworking を使用して処理する必要があることを理解しています。

AFNetworking ルートを使用する場合AFURLConnectionOperationは、メソッドを提供する一部として処理されますsetShouldExecuteAsBackgroundTaskWithExpirationHandler:

投稿は単なるラッパーです。

RKObjectRequestOperation *operation = [self appropriateObjectRequestOperationWithObject:object method:RKRequestMethodPOST path:path parameters:parameters];
[operation setCompletionBlockWithSuccess:success failure:failure];
[self enqueueObjectRequestOperation:operation];

したがって、AFNetworking ルートを使用するための最も簡単なオプションは、 をサブクラス化しRKObjectManagerてオーバーライドするか、手動で (独自のユーティリティ メソッドで)postObject:作成することです。RKObjectRequestOperation次に、RKObjectRequestOperation HTTPRequestOperationプロパティにアクセスします。

于 2013-05-30T20:36:23.233 に答える