1

RestKit 曾经使用以下代码块支持多任务:

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

我正在查看最新版本 (0.20.x),但没有看到对后台策略枚举的任何引用。有谁知道如何在最新版本的 RestKit 中调用它?

编辑:Per 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];

但似乎没有 POST 的等价物,因为 RKObjectManager POST 方法在内部创建一个 RKObjectRequestOperation 并且不提供对它的访问。

有谁知道是否有不同的方法来设置这个?否则,我想我可以创建自己的扩展方法来提供对此设置的访问。

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 回答