异步NSURLconnection无论如何都有助于实时更新或向iOS应用程序中的服务器发送持续请求?

时间:2012-01-23 19:17:16

标签: ios nstimer nsurl

我对目标C非常陌生。我有一个案例,我需要定期向服务器URL发送请求。我建立了一个异步URL连接,并使用NSTimer函数调用viewWillAppear函数。

 - (void)viewWillAppear:(BOOL)animated
  {
       [super viewWillAppear:animated];
       NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL    URLWithString:@"myurl/test.csv"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0];

       NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request delegate:self];

       if(connection){
          label.text = @"connecting...";
        }else{
         //
        }


    }

 -(void)connection :(NSURLConnection *) connection didReceiveData:(NSData *)data{
     [self viewWillAppear:TRUE];
      response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      NSLog(response);
      }

我使用以下NSTimer方法调用viewWillAppear方法。

- (void)checkURLRequest
    {
     [self setProgressTimer:[NSTimer
                        scheduledTimerWithTimeInterval:(1.0f / 30.0f) 
                        target:self 
                        selector:@selector(viewWillAppear:) 
                        userInfo:self 
                        repeats:TRUE]];
    }

   - (void)setProgressTimer:(NSTimer *)theTimer
    {
    [_progressTimer invalidate];
     _progressTimer = theTimer;
    }

我的方法是否正确?因为当我更新文件' test.csv'在服务器上,当文件更改其仍然记录文件中的旧值时,它无法进行实时更新。

3 个答案:

答案 0 :(得分:2)

你不应该自己打电话给viewWillAppear:,特别是因为它需要拨打[super viewWillAppear:]来做你不了解的事情。我可以从经验中告诉你,自己调用这些视图控制器方法会导致很难调试的奇怪错误。

因此,请将您的网址连接处理代码移到您使用计时器调用的单独方法中,如果需要,还可以在viewWillAppear:中调用。

答案 1 :(得分:1)

这不是正确的方法,实际上你永远不应该调用那些viewcontroller回调方法,比如viewWillAppear。我不确定viewWillAppear上正在执行什么代码,但正确的方法是将代码移动到另一个方法并调用该方法。

答案 2 :(得分:1)

我会将所有的URL连接内容移到VC外部,并转移到使用块执行此操作的自定义类中。这将允许您在其他类中使用它,并且是更好的OO编程。如果您需要,我可以向您发送一个我用于图像加载的示例。