我目前正在将使用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执行,如果不是,我在后台进行调用的替代方法是什么?
提前致谢。
答案 0 :(得分:6)
也许我还没有完全理解这里的整体问题...... RestKit在从网络加载资源方面所做的一切就是已经在后台。几乎所有东西都已经是异步的,因此在NSOperation中运行现有的异步RestKit方法是重复的并且适得其反。话虽这么说,一旦RestKit告诉你它已经完成了你的数据下载(didLoadResponse),你可能想要在NSOperation中进行任何后续的后期处理,如果该部分是计算密集型且与UI无关的话。否则,不要试图超越RestKit,只需像在示例中那样运行它,你就可以使用异步优点。
此外,如果您打算同时触发多个请求,您可能需要查看使用RestKit的请求队列。它仍然会异步下载所有内容,但它只会在你告诉它时一次运行多个请求...当我的应用程序正在更新时,一次发送大约七个请求,但队列将连续运行它们而不是并行,从而防止任何网络带宽问题