如何在 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(在您自己的实用程序方法中)。然后访问RKObjectRequestOperationHTTPRequestOperation 属性。

【讨论】:

我问的是多任务,而不是多线程。您是正确的,默认情况下会发生多线程,但多任务是 ios 的一项功能,您可以订阅以在应用程序进入后台后短时间内继续执行。这就是后台策略枚举用来处理的内容,我正在寻找它是否有替代品,因为它似乎不再存在。 这让我非常接近!我能够看到如何将 setShouldExecuteAsBackgroundTaskWithExpirationHandler 用于 GET 方法,但是具有此方法的对象的一层太深,我无法为 POST 方法配置。我想我可以编写一个扩展方法,但在我这样做之前你知道有什么方法可以为 POST 配置它吗? 啊,有道理。感谢您的帮助!

以上是关于如何在 RestKit 0.20.x 中指定多任务支持?的主要内容,如果未能解决你的问题,请参考以下文章

无法让 RestKit 在 Xcode 4.6 中工作

如何通过 terraform 在 ecs 任务定义中指定环境变量?

CoreData + Restkit 当用户退出应用程序时要执行啥任务?

如何在 devenv 任务中指定多个构建类型,CruiseControl.net

使用 RestKIt 在核心数据实体中映射 json 对象

如何在mysql中定时清除所有库中指定的表中的数据,而不用每个库都写一遍定时任务,求大神指点!!!