Я встроил свой ViewController в контроллер панели вкладок, и теперь мой coreDataStack.managedContext не работает - PullRequest
0 голосов
/ 25 апреля 2019

Мое стартовое приложение работает нормально, однако теперь я хочу начать добавлять дополнительные функции, поэтому я встроил начальный вид (который уже был в контроллере навигации) в контроллер панели вкладок.Это когда он перестает работать.

Я считаю, что это как-то связано с тем, как я установил managedContext в моем файле AppDelegate.Вы увидите, что в моем примере кода ниже я изменил настройку с UINavigationController и .topViewController на UITabBarController и .selectedViewController, но когда код выполняется, он сразу завершается ошибкой и показывает ошибку в файле класса ViewController.swift для начального представления.

// **** Пример кода из ViewController:

do {
  let results = try managedContext.fetch(LocationFetch)    <—— Thread 1: Fatal error: …
  if results.count > 0 {
    // Fido found, use Fido
    currentLocation = results.first
  } else { 

// **** Пример кода из файла AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
guard let navController = window?.rootViewController as? UITabBarController,
    let viewController = navController.selectedViewController as? ViewController else {
        return true
}

viewController.managedContext = coreDataStack.managedContext
return true

}

Я недостаточно разбираюсь в Swift, чтобы решить это самостоятельно, поэтому любые указатели в правильном направлении будут полезны.Я смотрел во многих местах, но у меня нет опыта, чтобы понять это.

1 Ответ

0 голосов
/ 01 мая 2019

Я получил решение из другого места (спасибо, С. Джеррард), я был прав в том, что проблема в AppDelegate и связана с изменением взгляда, хотя я был близок к решению, у меня еще не было опыта правильно разобрать ...

Поскольку корневой контроллер больше не был UINavigationController, значит, navController равен nil, и viewController.managedContext никогда не назначается.

Мне нужно было заменить «блок if» чем-то, что начинается с получения контроллера вкладок, затем получает контроллер навигации с его первой вкладки (viewControllers? [0]), затем получает контроллер вида из этого и выполняет назначение :

если пусть tabController = window? .rootViewController как? UITabBarController, пусть navController = tabController.viewControllers? [0] как? UINavigationController, пусть viewController = navController.topViewController как? ViewController { viewController.managedContext = coreDataStack.managedContext }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...