在核心数据中获取数据时performBackgroundTask错误错误

时间:2018-09-09 15:52:23

标签: swift core-data nspersistentstore

我正在经历一个奇怪的问题: 我正在使用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

现在,如果我注释了performBackgroundTask行数据正确显示。

请提供帮助,因为backgroundTask可能会引起问题。 任何建议将不胜感激! 预先感谢!

1 个答案:

答案 0 :(得分:0)

PersistentContainer在主队列上运行。就像属性的名称所暗示的那样,此托管对象上下文旨在与应用程序的用户界面结合使用。也许您需要分派回主队列才能与UIApplicationDelegate和PersistentContainer进行交互。 PerformBackgroundTask通常用于更新核心数据。如果要进行提取,则应使用主viewContext。 也许使用...

DispatchQueue.main.async {

//您的代码

}