Ошибка выполнения executeBackgroundTask при получении данных в Базовых данных - PullRequest
0 голосов
/ 09 сентября 2018

Я допускаю странную проблему: Я использую backgroundFetch для извлечения данных из Core Data.

func fetchDataFromCoreData(completion:@escaping()->Void)
    {
        let appdel = UIApplication.shared.delegate as! AppDelegate
        let context = appdel.persistentContainer.viewContext

        appdel.persistentContainer.performBackgroundTask { (context) in

        let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "FreeApps")
        do
        {
                let data = try context.fetch(fetchReq) as? [NSManagedObject]
            self.resultData = data
            print(self.resultData ?? "data is empty")
            DispatchQueue.main.async{
            completion()
            }
        }

        catch
        {
            print("fetch error")
        }
       }

    }

Теперь, на мой взгляд, контроллер, в ячейке моей таблицы:

  let myDict = itunesViewModelObj.resultData?[indexPath.row] as? NSManagedObject
        print(myDict?.value(forKey: "name") as? String ?? "no name")myDict shows as fault but valefor key comes nil

Теперь, если я прокомментирую, данные строки executeBackgroundTask поступят правильно.

Пожалуйста, помогите, как может быть проблема с backgroundTask. Любые предложения будут высоко оценены! Заранее спасибо!

1 Ответ

0 голосов
/ 09 сентября 2018

PersistentContainer работает в главной очереди. Как следует из названия свойства, этот контекст управляемого объекта предназначен для использования в сочетании с пользовательским интерфейсом приложения. Возможно, вам нужно отправить обратно в главную очередь для взаимодействия с UIApplicationDelegate и PersistentContainer. PerformBackgroundTask обычно используется для обновления основных данных. Если вы делаете выборки, вы должны использовать основной viewContext. Может быть, используя ...

DispatchQueue.main.async {

// ваш код

}

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