2017-02-21 26 views
5

私はページを表示するときに、1分ごとに提示されるテーブルのデータを更新する必要があります。すべてのコントローラのライフサイクルメソッドが適切なタイミングで終了する必要があるので、このタイマーロジックをどこに追加するのかはわかりません。Xamarin.iOSにタイマーを追加する場所?

タイマーはどこに置く必要がありますか?

+0

私はあなたが' viewWillAppearからタイマーを呼び出す&スケジュールする必要がありますね。 –

+0

あなたはviewWillAppearでタイマーを始めることができますが、アプリがアクティブでない間にこのアップデートを発生させるには、バックグラウンドフェッチを使用し、アップデートする頻度をiOSに知らせる必要があります。更新。 –

答えて

3

ページを表示してから1分ごとにリクエストを行う必要があると言いたいので、ViewWillAppear()メソッドでタイマーを開始し、ViewWillDisappear()で停止することをお勧めします.ViewControllerがフォアグラウンドで表示されているときだけ実行されます。 OnTimedEventのバインドを解除することは、メモリリークを避けるために重要です。

これはあなたが必要とするものか、より具体的な要件がありますか?

サンプルコード: `メソッド&viewWillDisAppear`でnilにそれを無効&設定:: `メソッド

class MyViewController : UIViewController 
{ 
    public MyViewController(IntPtr handle) 
     : base(handle) 
    { 
    } 

    private Timer timer; 
    private bool timerEventBinded; 

    public override void ViewWillAppear(bool animated) 
    { 
     base.ViewWillAppear(animated); 
     if (timer == null) 
     { 
      timer = new Timer(); 
      timer.Enabled = true; 
      timer.Interval = 60000; 
     } 

     if (!timerEventBinded) 
     { 
      timer.Elapsed += OnTimedEvent; 
      timerEventBinded = true; 
     } 

     timer.Start(); 
    } 

    public override void ViewWillDisappear(bool animated) 
    { 
     if (timer != null) 
     { 
      timer.Stop(); 
      if (timerEventBinded) 
      { 
       timer.Elapsed -= OnTimedEvent; 
       timerEventBinded = false; 
      } 
      timer = null; 
     } 

     base.ViewWillDisappear(animated); 
    } 

    private void OnTimedEvent(Object src, ElapsedEventArgs e) 
    { 
     //do your stuff 
    } 
} 
+0

私は、このコードがOPが探しているものである理由についていくつかの適切な推論を追加することをお勧めします。ただコードを残して、「これは私のために働く」と言っても良い答えではありません。 – Cheesebaron

+0

@Cheesebaron確かに、追加されました。 –

+1

@DavidRihaこれは、アプリがバックグラウンドにあるときには機能しません。ユーザーが何時間もアプリを開いたままにするとは思われません。 –

関連する問題