2016-05-23 12 views
0

私はバックグラウンドでiOSアプリケーションのNSTimerを使用しています。これは、30秒ごとにデータを配列に保存しています。アプリケーションは、最後の10個の値(5分の値)を線図で表示します。NSTimer with drawbarChart in Background

私の問題は、画面に表示されないときに、バックグラウンドでも30秒ごとにデータをアレイに保存する機能を使用することです。私はこれについてたくさんのテーマを書いてきましたが、私はそれを理解していません。

私のタイマーは以下の通りです:

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: (#selector(ViewController.counting)), userInfo: nil, repeats: true) 
func counting() { 
timerCounter += 1 //Int 
if timerCounter%30==0 { 
    arrayOfValues.append(...) //Appending the array 
    reloadLineChart() // reload chart 
} 
} 

誰もがこれを解決する方法を見せてもらえますか?私は、ViewControllerのbackground-methodsで何かが存在するに違いないが、今は何を入力するのかはわかりません。 バックグラウンドでカウントしている関数とチャートを再ロードしている関数がなければならないと思いますアプリに戻ってきます。アプリのデリゲートで

答えて

0

この方法を使用することができます。

func applicationWillResignActive(application: UIApplication) {} 

アプリがバックグラウンドに入る直前に実行されます。この機能に追加したコード。したがって、カウンターを停止するコードを記述することができます。

その後、あなたは再びカウンターを有効にするには、次の機能を使用する必要があります。

func applicationWillEnterForeground(application: UIApplication) {} 

あなたが再び戻ってアプリに来るときあなたは、この関数で書いたコードが実行されます。十分にはっきりしていることを望みます。

+0

ありがとうございました。それは明らかです。 :)しかし、私の問題は、Timerがそこに定義されているため、AppDelegateのViewControllerClassからメソッドにアクセスしたいということです。 – FranzFerdinand

1

私はそれをお勧めしますが、何らかの理由でアプリケーションデリゲートにカウンタを宣言したくないことを理解しているかもしれません。しかし、あなたが定義したクラスと同じクラスから、私が言及した関数を呼び出すことができます。

override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(
     self, 
     selector: "applicationWillResignActive:", 
     name: UIApplicationWillResignActiveNotification, 
     object: nil) 
} 

func applicationWillResignActive(notification: NSNotification) { 
    // stop your counter 
} 

他の機能と同じようにしてください。希望は明らかです。

+0

こんにちは。この機能は動作します、ありがとうございます。今私はresignActiveとenterForegroundの2つのオブザーバー関数を持っています。しかし、私の最後の質問は明確ではありません。私は私のアプリでこのタイマーを持っています。コードをバックグラウンドで実行し、配列にデータを書き込まなければならないということをどうすればいいですか? – FranzFerdinand

+0

追加:はい私は知っています、より良い方法がありますが、私はまだ学んでいます、そして、この瞬間に、それはより良いです。私は、iOS-AppsのMVC-Conceptがさらに優れていると理解したとき、より良い方法を探します。 – FranzFerdinand

+0

あなたはいくつかの方法があります。この例に従うことをお勧めします:http://stackoverflow.com/questions/28313702/trying-to-implement-beginbackgroundtaskwithexpirationhandler-and-uilocalnotifica私はまた、 10分間バックグラウンドで実行する機能。 –