2011-12-05 9 views
0

私は、タブ付きのビューの1つがサーバー上のxmlファイルからポイントをダウンロードするmapViewであるストーリーボードアプリケーションに取り組んでいます。アプリが起動され、タブバーコントローラのタブが選択されるたびに、ファイルをダウンロードして解析するのに時間がかかります。さらに悪いことに、インターネットにアクセスできない場合、アプリケーションがクラッシュする:/アプリの起動時にiPhoneのダウンロード/解析XMLファイル?

私は、ビューコントローラのViewDidLoadではなく、アプリケーションのスプラッシュ画面でgetDataService(ダウンロードと解析)を使用したいこれはdidFinishLaunchingWithOptionsの下でappdelegateになっていますか?)そして、それがそのときやバックグラウンドで行われ、アプリが閉じられていればバックグラウンドで作業を続けます。

次に、今後の使用のために配列を保持したいのですが(これは辞書と関係がありますか?)、アプリケーションが完全に再起動されたときにのみXMLを再ダウンロードして解析します。

どうすればいいですか?誰かがこれらのことを行うチュートリアルやサンプルへの例やリンクを持っているなら、私はとても感謝しています。私はしばらく検索してきましたが、何を検索するのか分かりません。

答えて

1

実はdidFinishLaunchingWithOptions中にこれをしない:

理由は、iOSの読み込みに時間がかかりすぎる任意のアプリケーションを殺すことです。関連ドキュメントを手に入れることはできませんが、iOSは特定の期間内にアプリの起動が完了すると予想しています(3秒程度だと思います)。この時間枠内でこの方法が完了していない場合は、吊るされて、iOSはそれを殺すでしょう。

長いコードを実行している場合は、そのコードでバックグラウンドスレッドを開始することをお勧めします。

考えてみると、できるだけ早く使用可能なインターフェイスにユーザーを誘導することです。デバッガはiOSのkill機能を無効にします。これは、コードがデバイス上にある場合にのみアクティブになり、プログラマチックに無効にすることはできません。だから開発時にコードは正常に見えるが、実際に実行すると失敗する。

ロード中に何かを表示する必要がある場合は、長時間実行しているコードをバックグラウンドスレッドに置き、基本的にはスプラッシュ画面のコピーである一時的なビューに進めることをおすすめします。データが利用可能になったら、インタフェースを読み込みます。

0

AppDelegate applicationDidFinishLoading関数からこれを行い、それをAppDelegateのために定義したプロパティに割り当てると、データがダウンロードされて解析されている間も読み込み画面が表示されます。

- (BOOL)application:(UIApplicatioN *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSLog(@"loading!"); 
    sleep(5); //delay to show you that the log happens before the loading screen goes away 
    return YES; 
} 
0

アプリ起動時(Default.pngスプラッシュ画面の後)に表示される最初の画面を、同じ画像または非常に似た画像にしますが、何か起こっていることをユーザーからフィードバックします。 a UIActivityIndicator

インターネットに接続していない状態でアプリケーションを正常に起動できない場合、Appleは拒否します。これらのいずれかのようなユーザーに何かをアドバイスし、このような状況では、関連するメッセージを表示:

1)いいえ、インターネット接続なので、このアプリの機能は

2)いいえ、インターネット接続、およびこのアプリを制限される場合がありはしませんそれと機能する

関連する問題