Objective-c简单的轮询

9 浏览
0 Comments

Objective-c简单的轮询

我是Objective-C的新手,正在构建一个应用程序,需要在我的用户界面上进行后台轮询通用API以刷新一些数据。

在花费了几个小时寻找适合我的问题的答案/示例后,我找到了一些解决方案,如下所示:

Objective-C中的长轮询

应用程序启动时从外部服务器轮询

每小时向TCP服务器轮询iOS

http://blog.sortedbits.com/async-downloading-of-data/

但不幸的是,它们都没有涵盖我的场景,这是非常基本的:

viewDidLoad时,我需要开始轮询,假设是一个无限循环,每次迭代,假设是每10秒钟,调用一个API,当我收到数据时,我希望使用NSLog将该数据记录到控制台中,显然这不能在主线程上完成。

我真正需要的是一个非常简单的例子来演示如何做到这一点,简单意味着:

  • 由于很多原因,我不能实现长轮询/推送通知,并且不寻求一种方法来实现,假设我不能这样做。
  • 我不想依赖像LRRestyRESTKitAFNetworking或其他任何花哨的框架,因为我真的不需要它们,而且我不相信没有适用于这种基本场景的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看起来我不能这样做。

请帮助,我拒绝相信在这种基本场景中没有简单明了的解决方案。

0