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