Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-c简单轮询_Objective C_Multithreading_Polling_Nsoperationqueue_Nsconnection - Fatal编程技术网

Objective-c简单轮询

Objective-c简单轮询,objective-c,multithreading,polling,nsoperationqueue,nsconnection,Objective C,Multithreading,Polling,Nsoperationqueue,Nsconnection,我是objective-c新手,我正在构建一个应用程序,它需要对一个通用API进行后台轮询,以刷新我的用户界面上的一些数据。 在几个小时寻找适合我问题的答案/示例后,我遇到了以下解决方案: 但不幸的是,它们都没有涵盖我的基本场景: 我需要在viewdiload时开始轮询,比如说无限循环,在每次迭代中,比如说每10秒,调用一个API,当我收到数据时,我想用NSLog将数据记录到控制台中,显然这不能在主线程上完成 我真正需要的是一个关于如何做到这一点的非常简单的例子,简单的意思是: 我无法

我是objective-c新手,我正在构建一个应用程序,它需要对一个通用API进行后台轮询,以刷新我的用户界面上的一些数据。 在几个小时寻找适合我问题的答案/示例后,我遇到了以下解决方案:

但不幸的是,它们都没有涵盖我的基本场景: 我需要在
viewdiload
时开始轮询,比如说无限循环,在每次迭代中,比如说每10秒,调用一个API,当我收到数据时,我想用
NSLog
将数据记录到控制台中,显然这不能在主线程上完成

我真正需要的是一个关于如何做到这一点的非常简单的例子,简单的意思是:

  • 我无法实现长轮询/推送通知,原因很多,而且我也没有找到实现的方法,让我们假设我不能
  • 我不想依赖像
    LRResty
    RESTKit
    AFNetworking
    之类的花哨框架,因为我真的不需要它们,而且我不相信没有SDK公告可以涵盖这一基本场景
  • 除了我描述的内容之外,我不需要其他任何东西,因此没有身份验证,请求中没有参数,没有响应处理等(因为我是objective-c新手,不需要严格要求的东西可能会让我更困惑……)
我正在寻找的解决方案可能是这样的(使用NSOperationQueue将我的循环运行到单独的线程中):

但不幸的是,正如这里所说的:看起来我做不到


请帮忙,我不相信对于这个基本场景没有简单直接的解决方案。

可能的复制品最好使用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");
}