【问题标题】:What parent is viewContext referring to, when viewContext.automaticallyMergesChangesFromParent set to true?当 viewContext.automaticallyMergesChangesFromParent 设置为 true 时,viewContext 指的是哪个父级?
【发布时间】:2021-06-21 09:19:23
【问题描述】:

通常有后台上下文来执行写操作。

// Set automaticallyMergesChangesFromParent to true
persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
persistentContainer.performBackgroundTask { backgroundcontext in
    // Do your work...
    let object = backgroundContext.object(with: restaurant.objectID)
    backgroundContext.delete(object)
    // Save changes to persistent store, update viewContext and notify fetched results controller
    try? backgroundContext.save()
}

我对@9​​87654322@ 感到困惑。

我对@9​​87654323@(与主队列关联的托管对象上下文)和backgroundContext有以下观察。

  1. viewContext.parent 为零
  2. backgroundContext.parent 为零

我的问题是

  1. 如果我们需要设置viewContext.automaticallyMergesChangesFromParent = true,以便viewContext 接收来自backgroundContext 的更改,这是否意味着backgroundContextviewContext 的父级?
  2. 如果不是,viewContext.automaticallyMergesChangesFromParent = true 指的是哪个父级?

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    如果 parent 为 nil,则为 nil,不存在隐式父关系。当父上下文为 nil 时,automaticallyMergesChangesFromParent 自动合并保存到其持久存储协调器的更改。它不是父上下文,但它在这里做了一些类似于父上下文的事情。只要两个上下文使用相同的持久化存储协调器(或相同的NSPersistentContainer),那么这将自动合并没有父上下文关系的更改。

    【讨论】:

    • 谢谢。我现在明白了。 automaticallyMergesChangesFromParent 在这种情况下暗示 viewContext 正在从持久存储协调器获取最新更改,而不是父上下文。也许如果他们有一个像automaticallyMergesChangesFromParentOrPersistentStoreCoordinator 这样的冗长命名会让事情变得清晰;-)
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2018-06-23
    • 1970-01-01
    • 2020-10-30
    • 2012-07-17
    • 2018-12-06
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多