执行RestKit作为NSOperartion

时间:2011-06-06 01:04:21

标签: ios nsoperation restkit

我目前正在将使用ASIHTTPRequest和SBJson的项目迁移到RestKit。

之前的实现是使用NSOperation来生成HTTP请求,解析JSON对象并对Core Data API进行必要的调用。

我已将此重新考虑如下:

@implementation UpdateBeers

#pragma mark - NSOperation

- (void)main {
    [[RKClient sharedClient] get:@"/beers" delegate:self]; 
}

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response {  
    debug(@"didLoadResponse");
}  

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error {
    debug(@"%@", error);
}

#pragma mark - Memory

- (void) dealloc {
    [super dealloc];
}

@end

日志中出现以下内容

向网址http://localhost:9091/api/test发送GET请求。 HTTP正文:

问题是服务器从未收到请求。

添加以下行:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];

到main方法的末尾解决了这个问题。

我的问题是:

我是否应该将ResKit API调用作为NSOperation执行,如果不是,我在后台进行调用的替代方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:6)

也许我还没有完全理解这里的整体问题...... RestKit在从网络加载资源方面所做的一切就是已经在后台。几乎所有东西都已经是异步的,因此在NSOperation中运行现有的异步RestKit方法是重复的并且适得其反。话虽这么说,一旦RestKit告诉你它已经完成了你的数据下载(didLoadResponse),你可能想要在NSOperation中进行任何后续的后期处理,如果该部分是计算密集型且与UI无关的话。否则,不要试图超越RestKit,只需像在示例中那样运行它,你就可以使用异步优点。

此外,如果您打算同时触发多个请求,您可能需要查看使用RestKit的请求队列。它仍然会异步下载所有内容,但它只会在你告诉它时一次运行多个请求...当我的应用程序正在更新时,一次发送大约七个请求,但队列将连续运行它们而不是并行,从而防止任何网络带宽问题