Objective-c简单的轮询
Objective-c简单的轮询
我是Objective-C的新手,正在构建一个应用程序,需要在我的用户界面上进行后台轮询通用API以刷新一些数据。
在花费了几个小时寻找适合我的问题的答案/示例后,我找到了一些解决方案,如下所示:
http://blog.sortedbits.com/async-downloading-of-data/
但不幸的是,它们都没有涵盖我的场景,这是非常基本的:
当viewDidLoad
时,我需要开始轮询,假设是一个无限循环,每次迭代,假设是每10秒钟,调用一个API,当我收到数据时,我希望使用NSLog
将该数据记录到控制台中,显然这不能在主线程上完成。
我真正需要的是一个非常简单的例子来演示如何做到这一点,简单意味着:
- 由于很多原因,我不能实现长轮询/推送通知,并且不寻求一种方法来实现,假设我不能这样做。
- 我不想依赖像
LRResty
,RESTKit
,AFNetworking
或其他任何花哨的框架,因为我真的不需要它们,而且我不相信没有适用于这种基本场景的SDK文档。 - 除了我描述的之外,我不需要任何其他东西,因此不需要身份验证、请求中的参数、响应处理等(因为我对Objective-C和相关内容还不太了解,不必要的东西可能会让我更加困惑...)
我正在寻找的解决方案可能类似于以下内容(使用NSOperationQueue在单独的线程中运行我的循环):
- (void)viewDidLoad { [super viewDidLoad]; //在单独的线程上运行轮询 operationQueue = [NSOperationQueue new]; NSInvocationOperation *operation=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doPolling) object:nil]; [operationQueue addOperation:operation]; } -(void)doPolling { MyDao *myDao = [MyDao new]; while (true) { [myDao callApi]; [NSThread sleepForTimeInterval:10]; } } // 在MyDao中 -(void)callApi { NSMutableString *url= [NSMutableString stringWithFormat:@"%@",@"http:www.example.it"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; request.HTTPMethod = @"GET"; self.conn= [[NSURLConnection alloc] initWithRequest:request delegate:self]; if(self.conn){ [self.conn start]; } } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"didReceiveData %s","yes"); }
但不幸的是,如此所述:使用NSOperation进行异步NSURLConnection看起来我不能这样做。
请帮助,我拒绝相信在这种基本场景中没有简单明了的解决方案。