2017-05-30 16 views
1

私はクロージャでNSPersistentContainerが初期化され、変数に割り当てられている以下のコードのようなスニペットを見つけることがあります。クロージャ内で呼び出された補完ハンドラの問題

しかし、コードloadPersistentStoresの完了ハンドラが残りのコードと同期して実行されないため、このコードは最適ではないと思います。

これは、次のコード行でコンテナを作成した直後に利用できないことを意味します。正しい?もしそうなら、エレガントなソリューションは何でしょうか?

lazy var persistentContainer: NSPersistentContainer = { 
    let container = NSPersistentContainer(name: "Test") 
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 
    return container 
}() 

答えて

0
  1. 怠け者ではないがpersistentContainerをインスタンス化しますが、単に以前のそれを行うようにしてください。
  2. 補完ハンドラにも依存するコード行を含めます。
  3. 私は個人的に好きではない、店頭の準備ができています。
  4. 問題が発生していない場合はそのままにしてください。
+0

です。ポイント3について質問があります。個人的にこのソリューションが気に入らないのであれば、なぜそれを提案しますか? :)良いことがありますか? (私もそれが好きではない) – aneuryzm

+0

それは非常に簡単なソリューションとその不公平は、 'エレガントなソリューション'は単に好みであるため、それを示唆することはありません。私はCoreDataテンプレートを数回使っていますが、その遅延インスタンス化されたpersistantContainerの問題に決して遭遇したことはありません。問題がなければそのまま残すことを提案します。 – Simon

関連する問題