如何在RestKit 0.20.x中指定多任务支持?

时间:2013-05-30 19:05:14

标签: restkit restkit-0.20

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并且不提供对它的访问。

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

1 个答案:

答案 0 :(得分: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媒体资源。