概要
- コアデータを使用するiOSプロジェクトがあります
- コアデータは、ビューコントローラと通知に使用されます
実装
- と呼ばれるデータベースアクティビティ用のシングルトンクラスを作成しました
DatabaseEngine - appDelegate
didFinishLaunchingWithOptionsで、DatabaseEngineインスタンス化されます DatabaseEngineビューコントローラと通知のプロパティ(委任)が含まれています- ビューコントローラので、デリゲートをビューコントローラインスタンスに
viewDidLoad設定していますDatabaseEngine - データベースが開かれると、完了ハンドラー(デリゲートプロパティを介して)がメソッドを呼び出して、ViewControllerと通知をセットアップします
懸念事項(タイミングの問題)
DatabaseEngineが最初に作成され、その時点でビューコントローラviewDidLoadが実行されないため、DatabaseEngineデリゲートが初期化されないため、データベースがcompletionHandlerを実行するシナリオ(タイミングの問題)が発生する可能性がありますが、デリゲートはnil、タスクは実行されません
懸念に対処するために私がしたこと
- ビューコントローラーのviewDidLoad内で、データベースが起動しているかどうかを確認しています。ロードされていない場合は、タスク(ビューコントローラーのビューの設定)を再度実行します。
注-私はスレッドを明示的に使用していませんが、私の理解に基づいて、completionHandlerは非同期で実行されます。
質問
- 何度か試しましたが、View Controllerのデータが正しく読み込まれ、タイミングの問題はないようです。大きな値をループして(遅延を作成するために)試しましたが、それでもタイミングの問題はありません。なんでだろう?
- 私の実装は良いデザインですか、それともこれを行うためのより良い方法がありますか?
- それは私の懸念に対処する正しい方法ですか?