Swift 在不将更改持久化到另一个线程的情况下处理核心数据

Swift 在不将更改持久化到另一个线程的情况下处理核心数据,swift,core-data,Swift,Core Data,我处理核心数据。有时我需要计算一些数据。当我计算数据时,我会对数据进行更改。但我不想在仍然能够读取原始数据的情况下保留这些更改 所以在函数中,我需要这样的东西: func doSomething() -> something { // Get data with Core Data // Set variables on those data to do calculations // return a value like X // Delete/forg

我处理核心数据。有时我需要计算一些数据。当我计算数据时,我会对数据进行更改。但我不想在仍然能够读取原始数据的情况下保留这些更改

所以在函数中,我需要这样的东西:

func doSomething() -> something {
    // Get data with Core Data
    // Set variables on those data to do calculations
    // return a value like X
    // Delete/forget all changes on the data in this function. I will not need it anymore
}

这样做可能吗?

当然可以。在不同的托管对象上下文上执行工作,然后永远不要保存该上下文上的更改。
performBackgroundTask(:)
是一种很好的方法。你会这样做的

  • 使用
    performBackgroundTask
    创建新上下文。在下面的步骤中使用传递的闭包
  • 从该上下文中获取所需的任何对象
  • 做你的计算和任何你需要做的事情
  • 得到你的结果
  • 永远不要在此新上下文中保存更改。让它处理未保存的更改

  • 将数据从核心数据复制到结构,并在本地使用该结构