2012-02-16 6 views
0

自分のアプリケーションでバンドルに含めるデータベースをコピーし、書き込み可能にするためにDocumentsディレクトリに転送します。それは時間がかかり、私は現在スプラッシュスクリーンしか持っていません。 「Loading ...」アラートや何らかのアクティビティインジケータを置く方法はありますか(あなたのゲームをロードするときに、Words with Friendsと同様)、ユーザーに最初の20秒間何が起きているかのコンテキストを与える初めて彼らはアプリを開きますか? AppDelegateから提示される最初のviewControllerがまだロードされていないので、何らかの形でその画面への参照があったかどうかはわかりませんでした。ありがとう。アプリケーションの初期化時にデータを転送中に読み込み画面/ "警告"を作成する

答えて

1

アプリケーションの起動時に長時間実行されるタスクを実行する場合、いくつかの考慮事項があります。

アプリケーションは、あなたがそれ以外のアプリケーションは、ウォッチドッグ

Note On WatchDog Crashes

からシャットダウンしてしまいます、私は20秒であると考えて一定の時間内に- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsを完了する必要があり

の起動完了をしました

私が通常行うことは、LoaderViewControllerを作成し、それをウィンドウのサブビューとして追加することです。私はまだ最初のビューコントローラにアプリケーションのルートビューコントローラを設定します。これは基本的にローダーコントロールをローダービューコントローラーに渡して機能を実行します。

これがいつかについて窓、スプラッシュ画面、またはすぐに アプリケーションを使用してから人々を防ぐスタートアップ経験のいずれかの 他の種類を提供するを表示するAppleのヒューマンインターフェイスガイドライン

避けによって眉をひそめるされているが。 iOS Human Interface Guidelines

非あなたはまた、GrandCentralの派遣を使用して、バックグラウンドですべてのあなたのコピーを実行するか、メインスレッドをブロッキングを防止するために- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)argを使用したいとしている

ブロック

。この方法で、作業中に回転している UIActivityIndicatorViewを表示することができます。

グランドセントラル派遣

グランドセントラル派遣は、おそらくこれを処理するための最良の方法です。あなたは、バックグラウンドでタスクを実行し、メインスレッドを更新し、UIProgressViewのように同じブロックに一度終了し、この

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     //Do something in background 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      //Update UI 
     }); 
    }); 

のように、あなたのLoaderViewController [loaderViewController removeFromSuperview];を削除し、アプリケーションは最初のコントローラに移動しますすることができます。現時点では、更新された情報を表示するためにUIを更新することもできます。

Grand Central Dispatch Reference

関連する問題