2017-05-30 73 views
1

我發現瞭如下代碼的經常片段,其中NSPersistentContainer在閉包中初始化並分配給變量。在閉包中調用完成處理程序的問題

但是我不認爲這個代碼是最優的,因爲函數loadPersistentStores的完成處理程序不會與其餘的代碼同步執行。

這意味着storeDescription在下一行代碼中創建容器後無法使用。正確?如果是這樣,那可能是一個優雅的解決方案?

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

相關問題