2016-11-03 10 views
-2

私は頻繁に呼び出される必要があるいくつかのコードを持っています。たとえば、次の日であれば、何日前にチェックしてから、tableViewで日の文字列を移動します。頻繁にチェックされるコードを置く場所はどこですか?

今、私はviewDidLoadが常に呼び出されると思っていました。そのため、そこに配置するのは「うまくいく」でしょう。しかし、私は一晩シミュレータを残して、私はホームボタンを押して、再度クリックし、VCなどを変更し、viewDidLoadがヒットしていない。

散発的なチェックを行うための私の選択肢は、新しい日ですか? xは、など

などの散発チェックを行うための私のオプションは何
+0

定期的なチェックが必要な場合は、コントローラが表示されたとき、またはアプリケーションがフォアグラウンドに入ったときに呼び出されるか、タイマーがあると定期的に所定の間隔でチェックを呼び出します。 – Sulthan

+0

これは、コントローラがviewDidLoadで表示されたときにやってみたことですが、明らかに動作していません。 –

+0

コントローラが表示され、コントローラがロードされています( 'viewDidLoad')に違いがあります。 – Sulthan

答えて

1

起こったとして、それが「ある」の意味が何であるかによって異なり新しい一日

です!特に、の場合、「is」?あなたは "散発的"と言いますが、それはまるで綿毛です。いつこれを知る必要がありますか?どんな刺激に反応したいですか?ユーザーがあなたのアプリを開いたら?次にapplicationDidBecomeActiveに入れてください。毎日正午に?次に、NSTimerを実行します。実際には、ここでの問題は、をチェックする必要があるときに、自分自身を知りたくないと思われることです。

+0

基本的には、View Controllerをクリックするか、またはアプリケーションを再度開くときにこれらのチェックを行いたいので、最新の状態にします。 NSTimerのアイデアは機能しません。なぜなら、アラームアプリケーションではない場合、バックグラウンドタイマーを持つことができないと思うからです。 –

+0

さて、「アプリケーションを再開する」という言葉は、私が言ったことによってカバーされています: 'applicationDidBecomeActive'。私は「ビューコントローラをクリック」が何を意味するのかわからない。ビューコントローラはあなたがクリックできるものではありません。しかし、View Controllerの_view_が再び現れるたびに、あなたはそれを待つ(viewDidAppear)。その2つの間で、私たちはあなたの全体の仕様をカバーしましたか? – matt

1

あなたのアプリでは、何かを継続的にチェックするのは簡単ですが。バックグラウンドスレッドを作成するだけです。しかし、あなたが書いているのは、アプリのライフサイクルの外に残っているスレッドです。

アップルが提供するthis documentationをお読みください。あなたはバックグラウンドスレッドを入れるために良い言い訳をしなければなりません。このようなスレッドの範囲は、バックグラウンドのダウンロード、サウンドの再生などの特定のシナリオに限定されています。

Application DelegateにはapplicationDidBecomeActive(_:)があります。あなたはそのような継続的なチェックを模倣することができます。ただし、起動時に重い単語の読み込みをしないでください。そうしないと、アプリケーションが合理的な時間内にアクティブにならない場合、自動的に殺される可能性があります。

+0

ありがとう、私はapplicationDidBecomeActiveどこに置く必要があると思います。私はあなたがFacebookやTwitterアプリをクリックすると、ニュースフィードが自動的に新しい投稿をダウンロードするようになりたい。 –

3

この特定のケースでは、NSCalendarDayChangedNotificationを購読して、日付が変更されたときに通知を受け、それに応じてView Controllerで応答することができます。一般的に、didBecomeActiveまたはviewDidAppearが動作する可能性があります。

+0

良い点。私はいつもそのことを忘れています。 – matt

関連する問題