2016-11-01 5 views
0

私のアプリには、私たちのAPIから新しいデータを取得する更新画面が含まれています。これは現在、メニューのスライドから手動で呼び出されます。ルートビューのAppDelegateコールバックがロードされました

アプリの読み込み時に「更新が検出されました」という機能を追加します。アプリが読み込まれると新しいデータがチェックされ、新しいデータがある場合は更新画面がpopoverとして表示されます。私はまた、最初のアプリケーションの負荷時に更新画面を表示したい(データを持たないアプリケーションを出荷するため、少なくとも1つは更新を実行する必要がある)。

アプリは非常に簡単でroot view controllerは現在のところ、navcontrollerは、3つまたは4つのVCをシリーズに持っています(サイドページから2つの情報ページとアップデート画面を開くアプリとはかなり違います)。

私は、AppDelegateの "update check"を実行し、trueを返す場合は、popoverを提示する必要があると判断します。しかし、私はこのエラーを取得する:

2016-11-01 13:02:28.507 XXX[38895:1026306] Warning: Attempt to present on whose view is not in the window hierarchy!

どのroot controllerがまだロードされ、提示されていないので、私は推測しています。

この問題を解決するにはどうすればよいでしょうか。私はいくつかのアイデアを持っていますが、いずれかが良いかどうか、またはそれらがうまくいくかどうかは分かりません!

  1. は私の最初のビューコントローラに更新チェックを入れて(それが属するところこれがないアプリデリゲートに

  2. を使用するコールバック を「ルートビューコントローラがロードされている」のいくつかの並べ替えを探してみてください

  3. 私の最初のビューコントローラとしてのある種の「ルータービュー」は、チェックのロジックを置くことができます。 。しかし、私はこの画面がアプリを保持することを望んでいません(つまり、ユーザーが更新チェックを待つようにスピナーが必要ない - 私は彼らがアプリを使用して直進し、必要に応じて更新ポップオーバーショーを行いたい)

これに関するアドバイスはありますか?

答えて

0

新しいUIViewController(CheckForUpdateViewController) を作成し、そのビューコントローラをルートビューコントローラとして設定する必要があります。 AppDelegate内で更新を確認する代わりに、CheckForUpdateViewController.m内にそのチェックを追加することができます。必要に応じてポップオーバーを表示したり、アップデートが利用できない場合はナビゲーションビューコントローラを開くことができます。

+0

私はこれを考慮したいと思っていましたが、それがチェックされるまで、アプリに。更新チェックは、バックグラウンドで非同期に実行され、必要に応じて表示されます。私はあなたのアプローチはこれを許可するとは思わないが、返信のためにお越しください – TRG

+0

私は現在チェックを行っていないということを忘れていました(デベロッパー向けにハードコードされています)。私がNSTimerで現在のアクションを0.1秒遅らせれば、それは動作します。 – TRG

+0

AppDelegateでルートビューを設定した場合は、ルートビューコントローラ内の更新のチェックを追加する必要があります。したがって、あなたの場合、あなたはルートビューとしてnavigationControllerを持ち、そのナビゲーションコントローラのviewDidLoad()内には、更新があるかどうかをチェックし、その情報に基づいてポップオーバーを表示するかどうかをチェックできます。 – subasa

0

ローディングインジケータをルートビューコントローラよりもウィンドウに押し込もうとします。または最初のVCを選択してその上に配置します。

+0

ルートビューコントローラとして設定することはできません(私は望んでいません、私はメインのNav Controlerをルートにし、更新画面をモーダルに表示したい)。 私は最初のVCに入れてみました(私は、私はルートVCを取得していると思いますが)、それは上記のエラーを引き起こします – TRG

関連する問題