Objective-c简单轮询
我是objective-c新手,我正在构建一个应用程序,它需要对一个通用API进行后台轮询,以刷新我的用户界面上的一些数据。 在几个小时寻找适合我问题的答案/示例后,我遇到了以下解决方案: 但不幸的是,它们都没有涵盖我的基本场景: 我需要在Objective-c简单轮询,objective-c,multithreading,polling,nsoperationqueue,nsconnection,Objective C,Multithreading,Polling,Nsoperationqueue,Nsconnection,我是objective-c新手,我正在构建一个应用程序,它需要对一个通用API进行后台轮询,以刷新我的用户界面上的一些数据。 在几个小时寻找适合我问题的答案/示例后,我遇到了以下解决方案: 但不幸的是,它们都没有涵盖我的基本场景: 我需要在viewdiload时开始轮询,比如说无限循环,在每次迭代中,比如说每10秒,调用一个API,当我收到数据时,我想用NSLog将数据记录到控制台中,显然这不能在主线程上完成 我真正需要的是一个关于如何做到这一点的非常简单的例子,简单的意思是: 我无法
viewdiload
时开始轮询,比如说无限循环,在每次迭代中,比如说每10秒,调用一个API,当我收到数据时,我想用NSLog
将数据记录到控制台中,显然这不能在主线程上完成
我真正需要的是一个关于如何做到这一点的非常简单的例子,简单的意思是:
- 我无法实现长轮询/推送通知,原因很多,而且我也没有找到实现的方法,让我们假设我不能
- 我不想依赖像
、LRResty
、RESTKit
之类的花哨框架,因为我真的不需要它们,而且我不相信没有SDK公告可以涵盖这一基本场景AFNetworking
- 除了我描述的内容之外,我不需要其他任何东西,因此没有身份验证,请求中没有参数,没有响应处理等(因为我是objective-c新手,不需要严格要求的东西可能会让我更困惑……)
请帮忙,我不相信对于这个基本场景没有简单直接的解决方案。可能的复制品最好使用nstimer,而不是让线程休眠。计时器将执行您正在执行的操作。首先,它启动下一个计时器,然后轮询数据,在收到数据后记录结果。Sammio2建议的答案肯定会成功!是的,正如赫尔曼所说,使用定时器比让线程睡觉更好,谢谢你们!
- (void)viewDidLoad {
[super viewDidLoad];
//To run polling on a separate thread
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];
}
}
// and in 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");
}