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并且不提供对它的访问。
有没有人知道是否有不同的方法来设置它?否则我想我可以创建自己的扩展方法来提供对此设置的访问。
答案 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
媒体资源。