swift - CoreData 是否可以在另一个上下文/后台任务中从一个上下文/线程安全地使用 NSManagedObject
问题描述
是否可以在不同的后台任务之间使用 NSManagedObjects?我有这样的代码,当执行时使用 load() 方法在一个上下文/后台任务上使用 .performBackgroundTask { context 加载 NSManagedObjects
然后我想执行另一个 .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)
解决方案
我建议您阅读Core Data 并发概述以了解基础知识。
不管你的问题是什么......
你不能直接在上下文/线程之间传递托管对象。
您可以做的是从一个上下文中传递对象 ID,并使用它们从另一个上下文/线程中获取对象。
性能方面,如果有很多对象,这可能不是一个好主意,我建议您performBackgroundTask
使用单一上下文在一个中获取合同和公司。load
如果您不想公开其逻辑,则可以将上下文作为参数传递给您的函数。
推荐阅读
- css - 将道具传递给样式化组件时的语法问题
- episerver - 已发布页面中的块有“此项目未在任何地方使用”。
- python - 重新调用形状不兼容的张量
- python - 如何将布尔矩阵分解应用于聚类问题?
- apache-flink - 创建了多少个 Flink Functions 实例?
- javascript - v-img 加载动态图像引发错误 [Vuetify] 图像加载失败
- c# - 在 Xamarin 表单中显示图像的最佳方式
- c# - FluentFTP and TLS connection to IIS fails with error 534
- javascript - jQuery获取表单参数数组并在Ajax请求中提交
- java - 在 Draft State Microsoft Graph API Java 中发布消息创建消息