Я пытаюсь использовать NSPersistentContainer
в нескольких контроллерах представления во всем приложении для Core Data.
Первоначально я настроил контейнер в одном контроллере представления, который работал нормально:
Контроллер первого просмотра
var container: NSPersistentContainer!
container = NSPersistentContainer(name: "MyCoreData")
container.loadPersistentStores { storeDescription, error in
self.container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if let error = error {
print("Unresolved error \(error.localizedDescription)")
}
}
Но я перенес этот код в AppDelegate
в соответствии с документацией Apple :
AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "MyCoreData")
container.loadPersistentStores { description, error in
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
if let error = error {
fatalError("Unable to load persistent stores: \(error)")
}
}
return container
}()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let firstVC = window?.rootViewController as? FirstViewController {
firstVC.container = persistentContainer
}
if let secondVC = window?.rootViewController as? SecondViewController {
secondVC.container = persistentContainer
}
return true
}
}
Каждый из моих контроллеров представления теперь имеет переменную с именем container
типа NSPersistentContainer
. Однако, когда я загружаю контроллеры представления, я получаю следующую ошибку:
Неожиданно обнаружено nil при неявном разворачивании необязательного значения
Эта ошибка указывает на то, где container.viewContext
. Более конкретно:
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: container.viewContext, sectionNameKeyPath: "title", cacheName: nil)
Я не уверен, что получаю сообщение об ошибке от rootViewController
, потому что у меня нет единого контроллера представления root из-за того, что я использую Контроллер панели вкладок.