2012-01-23 10 views
0

私は目的Cに非常に新しいです。私は定期的にサーバーのURLにリクエストを送信する必要がある場合があります。非同期のURL接続を作成し、NSTimer関数を使用してviewWillAppear関数を呼び出しました。非同期NSURL接続は、とにかくリアルタイム更新やiOSアプリケーションのサーバーへの定数要求の送信に役立ちますか?

- (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'を更新したときに、ファイルが変更されたときにライブアップデートを実行することができないため、ファイル内の古い値をロギングすることになります。

答えて

1

私はすべてのURL接続をVCの外に移動し、ブロックを使用してカスタムクラスに移動します。これはあなたが他のクラスでこれを使うことを可能にし、より良いOOプログラミングです。必要に応じてイメージローディングで使用するサンプルを送信できます。

+0

[email protected]ありがとうございました! –

2

あなたが知らないことをする[super viewWillAppear:]を呼び出す必要があるので、特に自分でviewWillAppear:に電話するべきではありません。経験から、これらのView Controllerメソッドを自分で呼び出すと、デバッグが非常に困難な奇妙なバグが発生する可能性があります。

URL接続処理コードをタイマーで呼び出す別のメソッドに移動し、必要に応じてviewWillAppear:でコールすることもできます。

+0

アプリデリゲートに移行していいですか? –

+0

それは依存しますが、一般的には、アプリケーションデリゲートのものを残しておきたい、そうでなければすべてを行う1つの巨大なクラスになります。あなたは一般的に物事を一緒にしたい。 – DarkDust

1

これは正しいアプローチではありません。実際、viewWillAppearなどのViewControllerコールバックメソッドを呼び出すべきではありません。私はどのコードがviewWillAppearで実行されているか正確にはわかりませんが、これを行う正しい方法は、そのコードを別のメソッドに移動し、代わりにそのメソッドを呼び出すことです。

関連する問題