swift - performBackgroundTask Fault 在Core Data中获取数据时出错

标签 swift core-data nspersistentstore

我遇到了一个奇怪的问题: 我正在使用 backgroundFetch 从核心数据中获取数据。

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")
        }
       }

    }

现在在我的 View Controller 中,在我的表格单元格中:

  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 的问题。 任何建议将不胜感激! 提前致谢!

最佳答案

PersistentContainer 在主队列上运行。正如属性名称所暗示的那样,此托管对象上下文旨在与应用程序的用户界面结合使用。也许您需要分派(dispatch)回主队列以与 UIApplicationDelegate 和 PersistentContainer 进行交互。 PerformBackgroundTask 一般用于更新核心数据。如果你正在做抓取,你应该使用主 viewContext。 也许使用...

DispatchQueue.main.async {

//你的代码

关于swift - performBackgroundTask Fault 在Core Data中获取数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246198/

相关文章:

objective-c - 获取例程中出现死锁

arrays - 从空数组中检索值

swift - 程序化导航 Controller 不可见?

multithreading - 如何让我的应用程序响应更快?

iphone - 核心数据根据关系的实体计数得到结果

ios - 核心数据。如何交换 NSPersistentStores 并通知 NSFetchedResultsController?

ios - 使用默认数据时遵守 iOS 数据存储指南 (2.23)

ios - 无法从 iCloud 迁移永久存储

swift - 从父 View 控制 NSTabViewController

swift - 如何引用 Swift Playground 本身?