可以在不同的后台任务之间使用NSManagedObjects吗?我有这样的代码,在执行时使用.performBackgroundTask { context { NSManagedObjects }在一个上下文/后台任务上使用load()方法加载上下文
然后,我想执行另一个.performBackgroundTask { context,但问题是NSManagedObject似乎在那里不可用,因为从.performBackgroundTask {停止返回字段}开始的所有属性都不可用
self.load(predicate: NSPredicate(format: "company.id = %@", companyId))
.flatMap { contacts in
Future { promise in
self.storage.persistentContainer.performBackgroundTask { context in
let request : NSFetchRequest<Company> = Company.fetchRequest()
request.predicate = NSPredicate(format: "id = %@", companyId)
let result = try? context.fetch(request)发布于 2019-12-10 15:49:59
我建议您阅读Core Data concurrency overview以了解基础知识。
不管你的问题是什么。
您不能在上下文/线程之间直接传递托管对象。
您可以做的是从一个上下文传递objectIDs对象,并使用它们从另一个上下文/线程获取对象。
就性能而言,如果有许多对象,这可能不是一个好主意,我建议您使用单个上下文在一个performBackgroundTask中同时获取合同和公司。如果不想公开上下文的逻辑,可以将上下文作为参数传递给load函数。
https://stackoverflow.com/questions/59256095
复制相似问题