如何在 RestKit 0.20.x 中指定多任务支持?
Posted
技术标签:
【中文标题】如何在 RestKit 0.20.x 中指定多任务支持?【英文标题】:How do you specify multi-tasking support in RestKit 0.20.x? 【发布时间】:2013-05-30 19:05:13 【问题描述】: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];
但似乎没有 POST 的等效项,因为 RKObjectManager POST 方法在内部创建了一个 RKObjectRequestOperation 并且不提供对它的访问。
有谁知道是否有不同的方法来设置它?否则我想我可以创建自己的扩展方法来提供对此设置的访问。
【问题讨论】:
【参考方案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
属性。
【讨论】:
我问的是多任务,而不是多线程。您是正确的,默认情况下会发生多线程,但多任务是 ios 的一项功能,您可以订阅以在应用程序进入后台后短时间内继续执行。这就是后台策略枚举用来处理的内容,我正在寻找它是否有替代品,因为它似乎不再存在。 这让我非常接近!我能够看到如何将 setShouldExecuteAsBackgroundTaskWithExpirationHandler 用于 GET 方法,但是具有此方法的对象的一层太深,我无法为 POST 方法配置。我想我可以编写一个扩展方法,但在我这样做之前你知道有什么方法可以为 POST 配置它吗? 啊,有道理。感谢您的帮助!以上是关于如何在 RestKit 0.20.x 中指定多任务支持?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 terraform 在 ecs 任务定义中指定环境变量?
CoreData + Restkit 当用户退出应用程序时要执行啥任务?