2

コアデータの上に小さなアプリを開発しています。起動時に、メンテナンス タスクを開始する必要があります。高速ですが重要です。このタスクを実行するには、アプリ デリゲートが UIManagedDocument を開き、さまざまなチェックを実行する必要があります。チェックが完了するまで、アプリ ビューを開始しないでください。UIMD を開くことは非同期であるため、最初の UIview がドキュメントにアクセスしようとしたときに、アプリの委任は完了しません。ドキュメントの状態がまだ確定していない間に、アプリ デリゲートとビューがドキュメントを同時に開こうとするため、競合状態が原因でアプリケーションがクラッシュします。

絵コンテを使っているので、セグエはほぼOS任せ… 次回は全部手動でやってみようかな..

あなたの推奨事項は何ですか?注: 1) アプリのときはタスクを実行できません。バックグラウンド状態に戻ります。これは、元のデータベースとビューに表示される内容との間で矛盾した状態を回避するのが非常に面倒になるためです。2) 同じ理由で、通常の実行中に保守タスクを実行することは容易ではありません。3) すべてのビューは、ここで提案されているコードに従って、シングルトンを介して UIMD にアクセスします。

UIView でミューテックス ロックを設定することは、私の好みのルートではありません。アプリのデリゲートによって解放されるまで、タブ バーを表示している間、画面が黒のまま (データがない) であるためです。

コントロールを UIViews に渡す前に、アプリのデリゲートにシグナルを待機させる方法はありますか? この場合、落とし穴はありますか? これはおそらく推奨される方法ではないと思います。デリゲートがメンテナンス タスクの完了を待つ時間が長すぎると、iOS がアプリを強制終了する可能性があります。この場合、「長すぎる」とは何でしょうか。

4

1 に答える 1

0

もっとエレガントな方法でそれを行うことができます。ユーザーに最初に表示されるビューは、ある種の SplashView である必要があります (進行状況インジケーター付きの画像のみ)。あなたのタスクが進行している間、それは一番上にとどまるはずです。このビューをどのように表示するかはあまり重要ではありません。ストーリーボードの最初に設定するか、メッセージで手動で作成することができapplicationDidFinishLaunchingます。次に、タスクが終了しようとしているときに NSNotification を送信し、AppDelegate のオブザーバーで SplashView を非表示にして、最初のビューに貴重なコンテンツを表示します。これらのビュー間のトランジションに視覚効果を追加することもでき、アプリは非常に見栄えがします! :)

于 2013-01-03T16:26:17.550 に答える